小弟在学习Thinking in java时,看到如下一个例子:
//: c14:Interrupt.java
// From 'Thinking in Java, 2nd ed. ' by Bruce Eckel
// www.BruceEckel.com. See copyright notice in CopyRight.txt.
// The alternative approach to using
// stop() when a thread is blocked.
// <applet code=Interrupt width=200 height=100>
// </applet>
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import com.bruceeckel.swing.*;
class Blocked extends Thread {
public synchronized void run() {
try {
wait(); // Blocks
} catch(InterruptedException e) {
System.err.println( "Interrupted ");
}
System.out.println( "Exiting run() ");
}
}
public class Interrupt extends JApplet {
private JButton
interrupt = new JButton( "Interrupt ");
private Blocked blocked = new Blocked();
public void init() {
Container cp = getContentPane();
cp.setLayout(new FlowLayout());
cp.add(interrupt);
interrupt.addActionListener(
new ActionListener() {
public
void actionPerformed(ActionEvent e) {
System.out.println( "Button pressed ");
if(blocked == null) return;
/** 不明白的地方开始 */
Thread remove = blocked;
blocked = null; // to release it
remove.interrupt();
/** 不明白的地方结束 */
}
});
blocked.start();
}
public static void main(String[] args) {
Console.run(new Interrupt(), 200, 100);
}
} ///:~
小弟这个地方不太明白,remove指向block原来的那块内存区域后,那块内存也不会得到释放啊~和直接调用方法
block.interrupt();
有什么区别呢?请高人指点!多谢
------解决方案--------------------
if(blocked == null) return;有这句话,使 blocked = null;就是为了防止按钮被多次点击。remove.interrupt(); block.interrupt(); 没区别。