多线程暂停和控制(通过按钮控制暂停的4个小球)
一.
任务:通过按钮控制暂停的4个小球;按一次按钮就改变一次状态。
方法说明:在按钮事件里控制线程对象的状态,调用对象的方法改变其状态。
二.思路与源代码:
基本思路:设置一个bool值控制线程里的画图部分,为真则继续画,为假就休眠(时间设短点即可,每隔一段时间就会再检查一次bool的值)。在休眠时让i递减,这样再开始时小球就会从原位置开始。
在主函数内开启4个线程。加一个按钮,给按钮加动作监听器。把4个线程传入监听器。在线程中创建一个公有方法改变线程的属性BOOL值,在监听器中调用,按一次按钮就改变一次。即可完成控制。
PS:小球的绘制在上篇中的程序的基础上修改。
源代码:
监听器:
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class BUAction3 implements ActionListener{
private Graphics g;
private boolean go;
private Printthred3 p,p2,p3,p4;
//重新构造方法,传入4个线程
public BUAction3(Graphics g,boolean go,Printthred3 p,Printthred3 p2,Printthred3 p3,Printthred3 p4){
this.g=g;
this.go=go;
this.p=p;
this.p4=p4;
this.p2=p2;
this.p3=p3;
}
//修改线程中的go的值
public void actionPerformed(ActionEvent e) {
p.changego();
p2.changego();
p3.changego();
p4.changego();
}
}
在如何修改线程的BOOL属性上纠结了一下,果然思路要清晰啊。