黑马程序员---传统线程之间的同步通信
来源:互联网 发布:淘宝联盟挣钱 编辑:程序博客网 时间:2024/06/04 01:01
---------------------- android培训、java培训、期待与您交流! ----------------------
关于Tread之间进行同步通信
张孝祥老师举了一个面试题
子线程循环XX次,主线程循环XX次
这样交替循环xx次
我写了一个类如下:
public class ThreadTest{static boolean isSub=false;static Thread mainThread=null;static Thread subThread=null;public static void main(String[] args){subThread=new Thread(new Runnable(){public void run(){try{for(int i=0;i<50;i++){synchronized(ThreadTest.class){if(!isSub)subThread.wait();for(int j=0;j<5;j++)System.out.println("sub: "+j+" of "+i);isSub=false;mainThread.notify();}}}catch(InterruptedException e){e.printStackTrace();}}});mainThread=new Thread(new Runnable(){public void run(){try{for(int i=0;i<50;i++){synchronized(ThreadTest.class){if(isSub)mainThread.wait();for(int j=0;j<5;j++)System.out.println("main: "+j+" of "+i);isSub=true;subThread.notify();}}}catch(InterruptedException e){e.printStackTrace();}}});mainThread.start();subThread.start();}}
代码重写了许多遍
换了好多种方式
总是抛java.lang.IllegalMonitorStateException
然后查找了一下这个异常的相关信息
这个异常会在这种情况下抛出:
当前线程没有当前对象的锁资源时调用对象的wait()或notify()或notifyAll()方法
感觉有点明白synchronized为什么要传一个对象进去了
wait()方法和notify()方法是Object的方法,而不是线程的方法
之前一直以为线程的wait方法就是让这个线程等,notify()方法就是唤醒这个线程
这样获得的锁资源是主类的字节码
但是调用的是subThread和mainThread的wait和notify方法
这样就抛出了java.lang.IllegalMonitorStateException
所以将上面代码中的XX.wait()和XX.notify前面的subThread和mainThread全部
换成ThreadTest.class即可
到这里也明白了为什么要把主类和子类的方法抽出来放进一个Business类中了
synchronized可以直接写在函数里面 锁资源就是当前的实例对象了
wait和notify就可以直接调用this.wait()和this.notify
详细请查看:http://edu.csdn.net/heima
- 黑马程序员---传统线程之间的同步通信
- 黑马程序员---Java中传统线程同步通信技术
- 黑马程序员-JDK1.5之后的同步与通信运用(多个线程之间的同步与通信)
- 黑马程序员-线程的互斥与同步通信
- 线程之间的同步通信
- 黑马程序员_多线程(2) 传统线程通信&Condtion
- 传统线程同步通信技术
- 传统线程同步通信技术
- 传统线程同步通信技术
- 黑马程序员-线程同步
- 黑马程序员 线程同步
- 黑马程序员-多线程(创建线程、方法、同步、通信)总结
- 黑马程序员 Java学习总结之同步、线程间通信
- 传统线程同步通信技术(三)
- 【java并发】传统线程同步通信技术
- 黑马程序员—多线程线程间的通信与同步新特性
- java线程同步及通信Demo——传统的线程通信
- 黑马程序员——JAVA基础---线程之间的通信实现交替输出打印
- 黑马程序员---银行调度系统
- 程序员老鸟的一篇文章
- php5下载 轻松学会PHP
- 黑马程序员---移动用户资费系统
- innodb_flush_log_at_trx_commit 大大提高导入速度
- 黑马程序员---传统线程之间的同步通信
- Android入门:封装一个HTTP请求的辅助类
- http://home.cnblogs.com/wz/
- 黑马程序员---Lock和Condition
- 什么情况下应该建立索引,索引优化及分析
- Opcode 开源的碰撞检测库
- Ogre+Opcode实现碰撞检测
- seo分享之seo指令与技巧
- 黑马程序员---空中网面试题1