读书人

搞不懂的 java 线程有关问题

发布时间: 2012-10-20 14:12:48 作者: rapoo

搞不懂的 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了

读书人网 >编程

热点推荐