关于线程的一点补充
2013-05-20 19:47
176 查看
一、线程同步:
当两个或两个以上的线程同时访问一个资源。为了保护资源数据的安全,要求在同一时间只能一个线程访问该资源。
同步造成的结果:1、数据安全 2、效率低下。
二、线程死锁:
当两个线程循环依赖于一对同步对象时将发生死锁。例如:
一个线程进入对象ObjA上的监视器,而另一个线程进入对象ObjB上的监视器。如果ObjA中的线程试图调用ObjB上的任何synchronized方法,就将发生死锁。
死锁很少发生,但一旦发生就很难调试。
三、线程状态:
四、
五、
示例:
当两个或两个以上的线程同时访问一个资源。为了保护资源数据的安全,要求在同一时间只能一个线程访问该资源。
同步造成的结果:1、数据安全 2、效率低下。
二、线程死锁:
当两个线程循环依赖于一对同步对象时将发生死锁。例如:
一个线程进入对象ObjA上的监视器,而另一个线程进入对象ObjB上的监视器。如果ObjA中的线程试图调用ObjB上的任何synchronized方法,就将发生死锁。
死锁很少发生,但一旦发生就很难调试。
三、线程状态:
四、
五、
示例:
package java_520_1314; public class TestSynchronized { public static void main(String[] args) { MyObj obj = new MyObj(); OneThread one = new OneThread(obj); TwoThread two = new TwoThread(obj); } } class MyObj { public boolean isRun = true; } class OneThread extends Thread { private MyObj obj; public OneThread(MyObj obj) { this.obj = obj; this.start(); } public void run() { while (true) { // 同步块,当前线程对obj进行同步 synchronized (obj) { if (obj.isRun == true) { System.out.print("AA"); obj.isRun = false; // 唤醒下一个线程访问obj资源 obj.notify(); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } else { try { // 当前线程相对obj对象进行等待 obj.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } } } } class TwoThread extends Thread { private MyObj obj; public TwoThread(MyObj obj) { this.obj = obj; this.start(); } public void run() { while (true) { synchronized (obj) { if (obj.isRun == false) { System.out.print("B"); obj.isRun = true; // 唤醒下一个线程访问obj资源 obj.notify(); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } else { try {// 当前线程相对obj对象进行等待 obj.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } } } }
相关文章推荐
- 关于线程的一点补充
- 关于使用查询分析器access数据库导入Sql server数据库的一点补充
- 关于博文“PGRouting初探”的一点补充
- WF:关于流程设计器的一点补充
- 关于java中多线程的问题的一点思考(什么情况下需要考虑到线程,以及线程安全的问题?)
- 关于广播注册方式的一点补充
- 关于序列化的一点补充
- 一些关于线程用法的总结以及对上篇多线程同步、数据共享的补充
- 关于asp.net无刷新联动的一点补充说明
- 关于Memcached Cache是集中式还是分布式的一点补充
- 关于爬虫Demo的一点补充
- 关于线程的一点体会
- 关于HibernateGenericDAO 的一点补充
- C语言基础:C语言指针(4) - 补充一点关于指针的小知识
- c::关于虚函数的一点补充
- 关于《Foxit Phantom的完美破解》的一点补充——打印驱动破解
- 关于lexical_cast,一点补充
- WF:关于流程设计器的一点补充
- 关于前一篇innodb自增列自己的一点补充
- 关于彩虹表的一点补充