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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. import javax.management.loading.PrivateClassLoader;
  2. import java.util.*;


  3. public class A{

  4.         public static void main(String[] args) {
  5.                 Resource r=new Resource ();
  6.                 new Thread(new In( r)).start();
  7.                 new Thread(new Out(r)).start();

  8.         }

  9. }
  10. class Resource {
  11.           String name;
  12.           String sex;
  13.           
  14. }
  15. class   In implements Runnable{
  16.            private Resource r;
  17.            Object obj =new Object();
  18.             In( Resource r) {
  19.           this.r=r;
  20.            }
  21.        
  22.          public void run(){
  23.                  int x=0;
  24.                  while (true) {synchronized (obj) {
  25.                        
  26.                
  27.                          if (x==0) {
  28.                                  r.name="lilili";
  29.                                  r.sex="fimel";
  30.                                
  31.                         } else {
  32.                                
  33.                                 r.name="丽丽";
  34.                                  r.sex="女女女女女";
  35.                         }
  36.                          x=(x+1)%2;
  37.                         }
  38.                 }         
  39.          }
  40. }
  41. class Out implements Runnable{
  42.         private Resource r;
  43.         Object obj=new Object();
  44.     Out( Resource r) {
  45.   this.r=r;
  46.    }
  47.         public void run(){
  48.                 while(true){
  49.                         synchronized (obj) {
  50.                 System.out.print(r.name+"----");
  51.                 System.out.println(r.sex);
  52.         }
  53.                 }
  54. }

复制代码
输出结果如下:
丽丽----女女女女女
lilili----fimel
丽丽----女女女女女
lilili----女女女女女
丽丽----fimel
lilili----fimel
lilili----女女女女女
lilili----女女女女女
lilili----fimel
lilili----fimel
lilili----女女女女女
丽丽----女女女女女
lilili----女女女女女
lilili----fimel
lilili----女女女女女
丽丽----女女女女女
丽丽----女女女女女
lilili----女女女女女
丽丽----fimel
丽丽----女女女女女
lilili----fimel
丽丽----女女女女女
丽丽----fimel

评分

参与人数 1技术分 +1 收起 理由
黑妞~ + 1

查看全部评分

3 个回复

正序浏览
一诺千金 发表于 2014-3-31 16:34
class   In implements Runnable{
           private Resource r;
          // Object obj =new Object( ...

oooooooo。知道了。粗心惹的祸。谢谢
回复 使用道具 举报
class   In implements Runnable{
           private Resource r;
          // Object obj =new Object();------------------------------------------这里
            In( Resource r) {
          this.r=r;
           }
        
         public void run(){
                 int x=0;
                 while (true) {synchronized (obj) {
                        
               
                         if (x==0) {
                                 r.name="lilili";
                                 r.sex="fimel";
                                
                        } else {
                                
                                r.name="丽丽";
                                 r.sex="女女女女女";
                        }
                         x=(x+1)%2;
                        }
                }         
         }
}
class Out implements Runnable{
        private Resource r;
        //Object obj=new Object();-------------------------------------------------这里
    Out( Resource r) {
  this.r=r;
   }
        public void run(){
                while(true){
                        synchronized (obj) {
                System.out.print(r.name+"----");
                System.out.println(r.sex);
        }
                }
}
你分贝new了两个object对象,锁不是同一个
public class A{

        public static void main(String[] args) {
                Object obj=new Object();
                Resource r=new Resource ();
                new Thread(new In( r)).start();
                new Thread(new Out(r)).start();

        }

}

评分

参与人数 1技术分 +1 收起 理由
黑妞~ + 1

查看全部评分

回复 使用道具 举报
可是你两个obj 不是同一个啊.把obj定义到要操作的数据 的类中
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马