关于多线程 比如我先在一个类中启动了一个a线程(每启动一个线程可获取一个id什么的,就叫getPid()),然后调用start方法,然后在run()一直让这个线程无限循环运行,然后我在另外一个类中通过这个getPid()来终止这个线程。怎么实现,说下原理就行! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 设计3个类:1 设置状态的类 比如Status,有个私有属性boolean work,并且设置其set get 公共方法。2 是线程类, 比如ThreadA, 里面用到Status对象。在run()里设置死循环,(while(true),里面用get方法检测 work状态,为真就break,退出while 循环,线程结束。3 测试类 含main(0方法。用于启动线程,设置work状态。 可以在另一个类中定义一个用于终止线程的方法,有一个线程对象参数,在里面调用线程对象的interrupt方法终止线程运行,但是这要求你的这个线程类的run方法里用while(!isinterrupted()){//随便执行} 想要终止线程的时候,调用那个方法,把线程对象传递过去就可以了。 线程是不能终止的,如果强行终止将会产生对象不同的现象。具体的可以参见 JDK 1.2 就废弃的 Thread 的 stop 方法。当前 Sun 也是犯了同样的错误,造成了 API 上永久的废弃!线程可以采用中断、死循环加信号标记的方式进行处理。1:信号标记是个 volatile 的布尔类型变量,当这个变量值改变时,死循环条件发生变化,循环结束,线程就完成了,达到停止线程的目的。但有时候,这种方式并不起作用,比如当前线程处于阻塞状态(像 Thread#sleep, BlockingQueue#take 等方法的调用)时,无法到达下一个循环继续判断信号标记,这样的话需要采用第二种方式——中断。2:中断必须发生在线程处于阻塞状态时,或者再简单一点就是会抛出 InterruptedException 异常的方法都可以进行中断。如果可以的话,最好两者结合在一起使用。比如:public void stop() { running = false; thread.interrupt(); // 这个 thread 是启动的线程对象} public class MThread extends Thread{ private volatile boolean flag = true; public void run(){ while(flag){ try{ //do something }catch(InterruptedException ie){ } } } public void stopThread(){ flag = false; interrupt(); } java 与桌面 Java 里能判断盘符吗? 能不能通过一个字符串 自动匹配 执行函数 关于 File 类的 creatNewFile和mkdir方法的疑惑?? clone问题! static final和static 的区别 jbuilder 的Design中列不出来控件了, 真是怪事! java网络编程的问题! 不知道广州有没有需要兼职java程序员的???? 菜鸟求救:怎样实现统计一个方法执行多少次 找错 ClassNotFound error分析。。。。。。。。。。。。。。。
1 设置状态的类 比如Status,有个私有属性boolean work,并且设置其set get 公共方法。
2 是线程类, 比如ThreadA, 里面用到Status对象。在run()里设置死循环,(while(true),里面用get方法检测
work状态,为真就break,退出while 循环,线程结束。
3 测试类 含main(0方法。用于启动线程,设置work状态。
running = false;
thread.interrupt(); // 这个 thread 是启动的线程对象
}
public void run(){
while(flag){
try{
//do something
}catch(InterruptedException ie){
}
}
}
public void stopThread(){
flag = false;
interrupt();
}