A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 熊永标 中级黑马   /  2012-12-25 10:28  /  1338 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class ThreadCommunicate
  2. {
  3. public static void main(String[] args)
  4. {
  5. Resources r=new Resources();
  6. Input in=new Input(r);
  7. Output out=new Output(r);
  8. Thread t1=new Thread(in);
  9. Thread t2=new Thread(out);
  10. t1.start();
  11. t2.start();
  12. }
  13. }
  14. class Resources
  15. {
  16. String name=null;
  17. String sax=null;
  18. boolean tags=false;
  19. }
  20. class Input implements Runnable
  21. {
  22. Resources r=null;
  23. public Input(Resources r)
  24. {
  25. this.r=r;
  26. }
  27. public void run()
  28. {
  29. int i=0;
  30. while(true)
  31. {
  32. synchronized(r)
  33. {
  34. if(r.tags)
  35. {
  36. try{r.wait();}catch(InterruptedException e){}
  37. }
  38. if((i%2)==0)
  39. {

  40. r.name="张三";
  41. r.sax="男";
  42. }
  43. else
  44. {
  45. r.name="小英";
  46. r.sax="女";
  47. }
  48. i++;
  49. r.tags=true;
  50. r.notify();
  51. }
  52. }
  53. }
  54. }
  55. class Output implements Runnable
  56. {
  57. Resources r=null;
  58. public Output(Resources r)
  59. {
  60. this.r=r;
  61. }
  62. public void run()
  63. {
  64. while(true)
  65. synchronized(r)
  66. {
  67. if(!r.tags)
  68. {
  69. try{r.wait();}catch(InterruptedException e){}
  70. }
  71. System.out.println(r.name+"......"+r.sax);
  72. r.tags=false;
  73. r.notify();
  74. }
  75. }
  76. }
复制代码
线程间的通信注意事项:
1、一个线程的wait()需要别外一个线程的notify()。如果一个线程没有wait()而没有notify()的话,就发生线程永远的等待,发生DeadThread。
2、一个线程的wait()需要执行wait()的对象的相应notify(),其他的不可以。
3、notify可有在没有wait()的情况下执行,不影向程序运行。如果有该对应的wait()在等待,那么将唤醒此对象的线程。

1 个回复

倒序浏览
拿走了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马