菜鸟的多线程简单问题~~~
我作了一个小程序,希望有两个按钮,分别控制两个计数器,当一个线程启动后,CPU利用率就是100%了,根本无法相应其他事件,是在WIN2000下运行的,代码在下面,希望高手指点:
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class TryThreads extends Applet implements ActionListener{
TextField text1,text2;
Button button1,button2;
threadCount a,b;
public void init(){
button1=new Button("启动1");
button2=new Button("启动2");
text1=new TextField(20);
add(text1);
text2=new TextField(20);
add(text2);
add(button1);
button1.addActionListener(this);
add(button2);
button2.addActionListener(this);
b=new threads();
a=new threads();
}
public void actionPerformed(ActionEvent e){
if (e.getSource()==button1){
a.start();
while (true){
text1.setText(String.valueOf(a.i));
}
}
if (e.getSource()==button2){
b.start();
while (true){
text2.setText(String.valueOf(b.i));
}
}
}
}
class threadCount extends Thread{
public int i=0;
public void run(){
while (true){
i++;
try{
Thread.sleep(100);
}
catch(InterruptedException e){return;}
}
}
}
问题点数:50、回复次数:5Top
1 楼alphazhao(迷路飞羊)回复于 2002-05-23 11:09:18 得分 0
b=new threads();
a=new threads();
改成
b=new threadCount();
a=new threadCount();
看看现在行不行?
Top
2 楼whee(笨笨丸)回复于 2002-05-23 11:20:39 得分 0
哦,那个是不小心打错了,和这个问题无关,这样是无法通过编译的,我那个可以执行,不过线程一开始就停不住了Top
3 楼alphazhao(迷路飞羊)回复于 2002-05-23 12:02:13 得分 0
faint,看看你程序里面的这个:
while (true){
text1.setText(String.valueOf(a.i));
}
这个循环……sigh
还有后面b的也是
为什么不将这段代码text1.setText(String.valueOf(a.i));
放入线程里面去处理?加个text变量参数即可
Top
4 楼alphazhao(迷路飞羊)回复于 2002-05-23 12:04:21 得分 50
根本就是个死循环……难怪cpu占用100%Top
5 楼whee(笨笨丸)回复于 2002-05-23 20:49:24 得分 0
哦哦,我是初学啊,当然写的不是很对了,能把正解给我吗?Top




