Java线程使用
关于线程是Java语言中很重要的一块,在程序中有很多地方也使用线程。但是真正考虑如何在适合的场合使用线程呢?采用线程最明显的就是用于异步操作处理。那么为何要使用异步方式呢?
先来介绍下为什么有了进程,还需要线程。
第一:并行实体共享同一个地址空间和所有可用数据的能力。
第二:线程比进程更轻量级,比进程更容易创建,也更容易撤销。
第三:主要是涉及性能方面。
关于性能又涉及到线程的行为,几乎所有的线程I/O活动或计算都是交替突发的(对进程而言也是类似)。这里所说的I/O活动不是一般的磁盘读写处理,而是当一个线程等待外部设备完成工作而被阻塞时,才是I/O活动。这里要注意,某些I/O活动可以看作是计算,例如,当CPU向视频RAM复制数据以更新屏幕时,因为使用了CPU,所以这是计算,而不是I/O活动。
一般花费了绝大多数时间在计算上面叫计算密集型(也叫CPU密集型),一般在等待I/O上花费了绝大多数时间叫I/O密集型。若多个线程都是CPU密集型的,那么并不能获得性能上的增强,但是如果存在着大量的计算和大量的I/O处理,拥有多个线程允许这些活动彼此重叠进行,那么会加快应用程序的执行速度。
另外从JVM角度出发,线程的切换也是要花代价的,而且线程的优先级并不是特别有效(像windows和liunx的线程优先级有很多等级)。Java线程的调度还是需要人工控制,不然在并发高峰时,还是会出现部分线程抢占不到CPU,而不能运行。
随着多核的到来,多线程也更适合进行CPU密集型的处理,打个比方,用一个线程来计算一系列数组[1,3,4,52,343,32,6,……,4]的最大值,还是用多个线程来计算。谁的速度快,不得而知(大家也可测试下)。不过矩阵运算或者科学计算时,多核是比较具有优势。
总之线程是一个比较复杂的概念,涉及通信、锁、调度、多线程设计模式几个方面,这些知识也很重要(以后会在博客里提到)。
最后额外说下进程与程序的区别,虽然很微妙,但非常重要。用一个比喻可以使我们更容易理解这点。假设一个厨师正在做生日蛋糕。他有做生日蛋糕的食谱,所需要的原料:面粉、鸡蛋、糖等。做蛋糕的食谱就是程序,厨师就是处理器(CPU),而作蛋糕的各种原料就是输入数据。进程就是厨师阅读食谱、取来各种原料及烘制蛋糕等一系列动作的总和。
相关文档:
本篇内容承接上篇之后,属JAVA基础知识之数据类型,所以更倾向于JAVA语言本身,适合初学和复习的朋友阅读。
一。数据类型
1.基本数据类型
&nb ......
javax.swing.plaf.metal.MetalLookAndFeel
com.sun.java.swing.plaf.windows.WindowsLookAndFeel
com.sun.java.swing.plaf.motif.MotifLookAndFeel
com.sun.java.swing.plaf.mac.MacLookAndFeel
com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel //java6新皮肤,玻璃透明
我的资源中有相关 java swing 方面的教程,j ......
分配页面Role_Right.jsp原码:
<%@ page language="java" isELIgnored="false" pageEncoding="GBK" errorPage="/inc/exception.jsp"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>角色分配权限</title>
<!--列表--& ......
有两种实现方法,分别是继承Thread类与实现Runnable接口
用synchronized关键字修饰同步方法
反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。suspend()方法容易发生死锁。调用suspend()的时候 ......
事务的特性:
1) 原子性(atomicity):事务是数据库的逻辑工作单位,而且是必须是原子工作单位,对于其数据修改,要么全部执行,要么全部不执行。
2) 一致性(consistency):事务在完成时,必须是所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。
3)&n ......