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),而作蛋糕的各种原料就是输入数据。进程就是厨师阅读食谱、取来各种原料及烘制蛋糕等一系列动作的总和。
相关文档:
inkfish翻译,请勿商业性质转载,转载请注明来源(http://blog.csdn.net/inkfish
)。本文是我学习JUEL同时,对原网站进行的简单的翻译,原网站地址:http://juel.sourceforge.net/guide/start.html
。
快速入门
JUEL
发行版包含下面一些jar文件:(来源:http://blog.csdn.net/inkfish)
1.juel-api-2.2 ......
自定义标签,标签处理器类:
PrivilegeTag.Java有权限的类设计:
package com.qizhi.tags.bean;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.jsp.tagext.TagSupport;
import com.qizhi.entity.Roleright;
import com.qizh ......
什么是java序列化,如何实现java序列化?
答:序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。
序列化的实现:将需要被序列化的类实现Serializable接口,该接口 ......
有两种实现方法,分别是继承Thread类与实现Runnable接口
用synchronized关键字修饰同步方法
反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。suspend()方法容易发生死锁。调用suspend()的时候 ......
您查询的关键词是:newinstance object initargs 。如果打开速度慢,可以尝试快速版;如果想保存快照,可以添加到搜藏。
(百度和网页http://bbs.iaiai.com/forum/read.php?tid=2690的作者无关,不对其内容负责。百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面。)
主题 : java的反射 ......