我正在阅读这篇文章,关于从一个线程中断另一个线程的建议是
“”“如果正确实施,以下几种方法应该可以奏效。
您可以让两个线程定期检查一些常见的标志变量(例如,将其称为stopNow),并安排两个线程在完成时进行设置。(标志变量需要是volatile…或正确同步的。)
您可以让两个线程定期调用线程。isInterrupted()方法,查看它是否已被中断。然后每个线程都需要调用线程。完成后,在另一个上中断()。" " "
我不明白第二种方法是如何使用线程的。isInterrupted()。也就是说,如何调用线程1。线程2上的中断()。
考虑这个例子,在main方法中,我启动了两个线程t1和t2。我想在达到一定条件后停止t1。我怎样才能做到这一点?
class Thread1 extends Thread {
public void run(){
while (!isDone){
// do something
}
} //now interrupt Thread-2
}
class Thread2 extends Thread {
public void run(){
try {
while(!Thread.isInterupted()){
//do something;
}
catch (InterruptedExecption e){
//do something
}
}
}
public class test {
public static void main(String[] args){
try {
Thread1 t1 = new Thread1();
Thread2 t2 = new Thread2();
t1.start();
t2.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
您可以考虑使用未来的界面。它提供了一个取消方法。http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html
public class test {
private static boolean someCondition = true;
public static void main(String[]args){
Thread t2 = new Thread(new someOtherClass("Hello World"));
Thread t1 = new Thread(new someClass(t2));
t2.start();
t1.start();
try {
t1.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
static class someClass implements Runnable{
Thread stop;
public someClass(Thread toStop){
stop = toStop;
}
public void run(){
while(true){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(someCondition && !stop.isInterrupted()){
stop.interrupt();
}
}
}
}
static class someOtherClass implements Runnable{
String messageToPrint;
public someOtherClass(String s){
messageToPrint = s;
}
public void run(){
while(true){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(messageToPrint);
}
}
}
}
这里的上下文是您正在尝试使用线程中断来实现您的方案。
为了实现这一点,t1对象需要引用t2线程对象,然后它只调用t2。中断()。
t1
可以通过多种方式获取对t2
的引用。
问题内容: 我有一个扩展线程的类。该线程在运行时会花费大部分时间处于睡眠状态,它将执行检查,如果为true,则执行简单的操作,然后睡眠1/2秒并重复执行。 该类还具有由其他线程调用的公共方法。如果调用此方法,则我希望线程在已经处于休眠状态的情况下休眠更长的时间,或者在没有休眠的情况下立即休眠。我试图让this.sleep出现,但它似乎仍在休眠当前线程,并且它抱怨该方法sleep是静态的,应该被静态
在一个android服务中,我创建了用于执行一些后台任务的线程。 我遇到一个情况,线程需要在主线程的消息队列上发布特定任务,例如。 有没有方法获取主线程的并从我的另一个线程向它发布/?
本文向大家介绍Java中断一个线程操作示例,包括了Java中断一个线程操作示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java中断一个线程操作。分享给大家供大家参考,具体如下: 一 点睛 中断一个线程,意味着该线程在完成任务之前,停止它正在进行的一切当前的操作。 有三个比较常用的函数: interrupt():一个正在运行的A线程,可以调用B线程对应的interrupt方法来中断线
目前,我使用的是firebase实时数据库。因此,我的数据更改来自另一个线程。因此,我无法控制何时更新新的数据。然后我如何知道何时调用以刷新UI? 谢谢
我是android新手,我试图发出http post请求,我得到了以下错误,我已经发布了我的代码和我的Logcat的一些行。我应该在另一个类中这样做吗?如果是,如何做,或者只是我必须在当前代码中修复的东西。 logview 02-18 10:03:20.477:W/DalvikVM(3759):ThreadId=15:线程退出,异常未捕获(组=0x4001D760) 02-18 10:03:20.
以下是问题陈述: 编写一个java程序,使用线程计算前25个素数,并计算前50个斐波那契数。将计算斐波那契数的线程的优先级设置为8,将另一个设置为5。在计算了30个斐波那契数之后,让这个线程进入睡眠状态,开始计算素数。计算完25个素数后,继续斐波那契数计算。 我的代码: 我本以为当斐波那契线停止时,其余的素数会被打印出来,但那没有发生,这背后的原因可能是什么?