首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

搞不懂的 java 线程有关问题

2012-10-20 
搞不懂的 java 线程问题代码不是太长,就是下面这段代码,首先看一下,凭感觉回答有没有问题,然后运行一下。 p

搞不懂的 java 线程问题
代码不是太长,就是下面这段代码,首先看一下,凭感觉回答有没有问题,然后运行一下。



public class Test {
public synchronized void t(){
new Thread(new Fuzhu()).start();
}
public static void main(String[] args) {
new Test().t();
}
}

class Fuzhu implements Runnable{
public void run() {
            try {
this.wait(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
}


运行之后,有谁能回答一下,为什么回报 java.lang.IllegalMonitorStateException: current thread not owner 这个异常.   怎么这种文章也到首页来了?小编能否过滤一下 11 楼 samttsch 2011-09-15   wpskl 写道我还有个问题:
    就是如何定时释放一个已经加了synchronized 的方法(比如这个方法执行的时间很长,影响后面的处理,我想如果这个方法执行了多长时间还没有执行完毕,就让它释放这个锁),这该怎么做呢?

锁获取了,就必须要释放,其他线程才能执行

如果一个方法执行时间太长,可以分成几个段或几个方法来执行
synchronized (object)
{

}

public synchronized void t(){
}
这个形式等于
public void t(){

  synchronized(this)
  {

  }

}
12 楼 totti_1587 2011-10-01   this.wait(1000);
这里的this指的是Fuzhu 的对象,要在某个对象上wait必需先获取这个对象锁,你都没有获取Fuzhu 的对象锁,当然不能在Fuzhu 上wait了

热点排行