易截截图软件、单文件、免安装、纯绿色、仅160KB

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 的自带几种皮肤的类名

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 ......

java动态代理

代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。
在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式一般涉及到的角色有
抽象角色:声明真实对象和代理对象的公共接口(求局长办事的人)
代理角色:代理对象角色内部含有对真实 ......

JAVA语言如何进行异常处理

关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
答:Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调 ......

java序列化

什么是java序列化,如何实现java序列化?
答:序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。
序列化的实现:将需要被序列化的类实现Serializable接口,该接口 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号