黑马程序员技术交流社区

标题: 多线程安全问题 [打印本页]

作者: 苑桥别馆    时间: 2014-12-5 18:54
标题: 多线程安全问题
  1. class Resource
  2. {
  3.          public String name;
  4.          public String sex;
  5. };
  6. class Input implements Runnable
  7. {
  8.         boolean flag=true;
  9.         private Resource r;
  10.         Input(Resource r){
  11.                 this.r=r;
  12.         }
  13.         public void run(){
  14.                 synchronized(Input.class){
  15.                                 while(true){
  16.                                         if(flag){
  17.                                                 r.name="张三";
  18.                                                 r.sex="男";
  19.                                                 flag=false;
  20.                                         }else{
  21.                                                 r.name="lili";
  22.                                                 r.sex="girl";
  23.                                                 flag=true;
  24.                         }
  25.                 }
  26.         }
  27.        
  28.         }
  29. };
  30. class Output implements Runnable
  31. {
  32.         private Resource r;
  33.         Output(Resource r){
  34.                 this.r=r;
  35.         }
  36.         public void run(){
  37.                 synchronized(Input.class){
  38.                 while(true)
  39.                         System.out.println(r.name+"--"+r.sex);
  40.                 }
  41.         }
  42.        
  43. };
  44. class ResourceMain
  45. {
  46.         public static void main(String[] args)
  47.         {
  48.                 Object objs=new Object();
  49.                 Resource r=new Resource();

  50.                 Output out=new Output(r);
  51.                 Input in=new Input(r);
  52.                 Thread t1=new Thread(in);
  53.                 Thread t2=new Thread(out);
  54.                 t1.start();
  55.                 t2.start();
  56.         }
  57. }
复制代码
如上代码,用Inout.class对象加锁同步后为什么成了死锁 ,程序不运行 ,不同步不加锁后却可以运行,这是为什么?


作者: kerner    时间: 2014-12-5 21:24
while是死循环,一个线程持有锁后,进入死循环,释放不了锁啊。。。。
要把锁放在while循环里面。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2