Java 多线程使用要点分析
这里有新鲜出炉的 Java 设计模式, 程序狗速度看过来!
Java 程序设计语言
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台 (即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)) 的总称
这篇文章主要介绍了 Java 多线程使用要点分析的相关资料, Java 多线程开发需要主要的细节问题很多, 这里就说下, 需要的朋友可以参考下
多线程细节问题
sleep 方法和 wait 方法的异同点?
相同点:
让线程处于冻结状态.
不同点:
sleep 必须指定时间
wait 可以指定时间也可以不指定时间
sleep 时间到, 线程处于临时阻塞状态或者运行态
wait 如果没有时间, 必须通过 notify 或者 notifyAll 唤醒
sleep 不一定非要定义在同步中
wait 必须定义在同步中
都定义在同步中时
sleep 放执行权, 不放锁
wait 放执行权, 放锁
- syschronized(obj)
- {
- wait();// 0 1 2
- code...
- }
- syschronized(obj)
- {
- notifyAll();// 3
- code...
- }
线程如何停止
stop 方法
stop 方法已经过时, 看描述发现, 有其他解决方案.
线程结束: 就是让线程任务代码执行完, run 方法结束
run 方法如何结束?
通过定义循环
注意: 万一线程在任务中处于冻结状态他还能判断标记吗?
所谓的中断状态并不是停止线程.
interrupt 中断状态使
如果目标线程等待很长时间, 则应使用 interrupt 方法来中断该等待
所谓的中断并不是停止线程
interrupt 的功能是 将线程的冻结状态清除, 让线程恢复到的运行状态(让线程重新具备 cpu 的执行资格)
因为时强制性的所以会有异常 InterruptedException 发生, 可以在 catch 中捕获异常,
在异常处理中, 改变标记让循环结束, 让 run 方法结束
守护线程
守护线程: 也可以理解为后台线程, 之前创建的都是前台线程
只要线程调用了 setDaemon(true); 就可以把线程标记为守护线程
前台后台线程运行时都是一样的, 获取 CPU 的执行权执行
只有结束的时候有些不同
前台线程要通过 run 方法结束, 线程结束
后台线程也可以通过 run 方法结束, 线程结束, 还有另一种情况,
当进程中所有的前台线程都结束了, 这时无论后台线程处于什么样的状态, 都会结束, 从而进程会结束
进程结束依赖的都是前台线程
线程优先级
线程的优先级: 用数字标识的, 1-10
其中默认的初始优先级时 5 最明显的三个优先级 1,5,10
setPriority(Thread.MAX_PRIORITY);
线程组
线程组: ThreadGroup: 可以通过 Thread 的构造函数明确新线程对象所属的线程组
线程组的好处, 可以对多个同组线程, 进行统一的操作
默认都属于 main 线程组
匿名内部类
- Runnable rn = new Runnable() {
- public void run() {
- }
- };
- // 上述代码等价于
- class Anomymous implements Runnable {
- public void run() {
- }
- }
- Runnable rn = new Anomymous();
来源: http://www.phperz.com/article/18/0207/359262.html