黑马程序员技术交流社区

标题: 多线程同步 synchronized 报错!求解 [打印本页]

作者: liuch111    时间: 2015-7-25 17:43
标题: 多线程同步 synchronized 报错!求解
  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. }
复制代码

作者: liuch111    时间: 2015-7-25 17:44
synchronized(obj){  

写在第6行没问题
写在第3行的话 编译报错,, 什么原因呢?
作者: a12366456    时间: 2015-7-25 18:14
你把同步代码块,写到类声明成员的地方,这个地方只能写定义成员变量和成员函数的代码和初始化的代码块等和构造类有关的代码,像功能性的代码只能写到函数里面,比如System.out.print();和再次对obj赋值写到那个位置就会报错,而且同步代码快里面只能调用方法不能定义方法吧
作者: liuch111    时间: 2015-7-25 18:20
大神都去哪了!~~




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