假设有class Lock和class Reader,class Writer三个类, Reader和Writer以Lock为锁来进行共享数据的互斥访问.假设Reader和Writer类有如下内容:
class Reader implements Runnable {
... ...
private Thread readerThread;
public Reader() {
... ...
readerThread=new Thread(this);
}
... ...
public void start() { readerThread.start(); }
public void reset() {
readerThread=null;
readerThread=new Thread(this);
}
... ...
}
Writer类与此相似. 现在在主程序中分别有三个类的实例:
Lock lock=new Lock();
Reader reader=new Reader();
Writer writer=new Writer();
reader.start(); writer.start();
... ...
那么,假如在程序执行到某处时有如下语句:
lock=new Lock(); 使原先lock指向的对象成为一个无用对象而被释放掉,那么以它为锁的reader和writer里的线程会怎么样? 继续运行下去还是停止? 第二问题: 如果并不把锁对象释放, 而是把两个线程释放,也即在程序某处执行了: reader.reset(); writer.reset();
那么原先的两个线程是继续运行下去呢还是被停止?
class Reader implements Runnable {
... ...
private Thread readerThread;
public Reader() {
... ...
readerThread=new Thread(this);
}
... ...
public void start() { readerThread.start(); }
public void reset() {
readerThread=null;
readerThread=new Thread(this);
}
... ...
}
Writer类与此相似. 现在在主程序中分别有三个类的实例:
Lock lock=new Lock();
Reader reader=new Reader();
Writer writer=new Writer();
reader.start(); writer.start();
... ...
那么,假如在程序执行到某处时有如下语句:
lock=new Lock(); 使原先lock指向的对象成为一个无用对象而被释放掉,那么以它为锁的reader和writer里的线程会怎么样? 继续运行下去还是停止? 第二问题: 如果并不把锁对象释放, 而是把两个线程释放,也即在程序某处执行了: reader.reset(); writer.reset();
那么原先的两个线程是继续运行下去呢还是被停止?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货