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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. class hello implements Runnable {
  2.     Object obj=new Object();
  3.         //synchronized(obj){       如果把synchronized(obj)语句写到这里,为什么会报错呢?
  4.         public void run() {
  5.         for(int i=0;i<10;++i){
  6.                         synchronized(obj){
  7.             if(count>0){
  8.                 try{
  9.                     Thread.sleep(1000);
  10.                 }catch(InterruptedException e){
  11.                     e.printStackTrace();
  12.                 }
  13.                 System.out.println(count--);
  14.             }        }
  15.         }

  16.        
  17.     }

  18.     public static void main(String[] args) {
  19.         hello he=new hello();
  20.         Thread h1=new Thread(he);
  21.         Thread h2=new Thread(he);
  22.         Thread h3=new Thread(he);
  23.         h1.start();
  24.         h2.start();
  25.         h3.start();
  26.     }
  27.     private int count=5;
  28. }
复制代码

3 个回复

倒序浏览
synchronized(obj){  

写在第6行没问题
写在第3行的话 编译报错,, 什么原因呢?
回复 使用道具 举报
你把同步代码块,写到类声明成员的地方,这个地方只能写定义成员变量和成员函数的代码和初始化的代码块等和构造类有关的代码,像功能性的代码只能写到函数里面,比如System.out.print();和再次对obj赋值写到那个位置就会报错,而且同步代码快里面只能调用方法不能定义方法吧
回复 使用道具 举报
大神都去哪了!~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马