如何在没有任何中断的情况下运行线程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在没有任何中断的情况下运行线程相关的知识,希望对你有一定的参考价值。

我有一个方法,我想通过调用该方法来运行一个线程。但我可以运行一个线程。但现在我的问题是我希望我的线程运行,即使我多次调用该方法。例如,我正在调用一个调用线程方法的方法,它开始运行。现在我再次调用该方法,这不应该导致线程先运行,而不会影响以前运行的线程。我想过使用Thread.isAlive();.但仍然卡住了。

class MyRunnableThread implements Runnable{

    public static int myCount = 0;
    public MyRunnableThread(){

    }
    public void run() {
        while(MyRunnableThread.myCount <= 10){
            try{
                System.out.println("Expl Thread: "+(++MyRunnableThread.myCount));
                Thread.sleep(100);
            } catch (InterruptedException iex) {
                System.out.println("Exception in thread: "+iex.getMessage());
            }
        }
    }
}
public class RunMyThread {
    public void call(){
        System.out.println("Starting Main Thread...");
        MyRunnableThread mrt = new MyRunnableThread();
        Thread t = new Thread(mrt);
        t.start();
        while(MyRunnableThread.myCount <= 10){
            try{
                System.out.println("Main Thread: "+(++MyRunnableThread.myCount));
                Thread.sleep(100);
            } catch (InterruptedException iex){
                System.out.println("Exception in main thread: "+iex.getMessage());
            }
        }
        System.out.println("End of Main Thread...");
    }
}


public void CallThreadCaller()
{
   call();
}

现在我再次调用call()方法,它不应该影响先前运行的线程。它应该检查它是否正在运行或它应该启动线程。但是如果我们启动一个新实例,如何检查线程是否已在运行。

答案

你应该做的是如果你使用Java 1.7是使用ExecutorServiceExecutors.newSingleThreadExecutor()

这只有一个带有Unbounded队列的活动线程。因此,您对方法调用的后续调用将排队。

private ExecutorService ex = Executors.newSingleThreadExecutor();

public void yourMethod() {
    ex.submit(new Runnable() {
        public void run() {
            // Your logic
        }
    });
}

现在即使你多次调用yourMethod,第一个线程必须在后续线程启动之前完成。

以上是关于如何在没有任何中断的情况下运行线程的主要内容,如果未能解决你的问题,请参考以下文章

在没有服务的情况下杀死应用程序后如何在后台线程中运行代码?

在没有线程阻塞的情况下回调主线程(Java)

java - 检查线程是不是在没有循环或 Thread.sleep() 的情况下被中断 [重复]

Camerax 在服务中运行。如何在前台服务中获取生命周期所有者或在没有它的情况下运行?

运行/调试你的PHP代码

Java并发编程:线程中断(含代码)