我有一个方法,我想通过调用方法来运行一个线程。但我可以运行一个线程。但现在我的问题是我希望我的线程运行,即使我多次调用该方法。例如,我正在调用一个调用线程方法的方法,它开始运行。现在我再次调用该方法,这不应该导致线程先运行,而不会影响以前运行的线程。我想过使用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()方法 它不应该影响以前的线程运行。它应该检查它是否正在运行或它应该启动线程。但是如果我们启动一个新实例,如何检查线程是否已在运行。
答案 0 :(得分:2)
如果您使用Java 1.7,您应该做的是使用ExecutorService
即Executors.newSingleThreadExecutor()
。
这只有一个带有Unbounded队列的活动线程。因此,您对方法调用的后续调用将排队。
private ExecutorService ex = Executors.newSingleThreadExecutor();
public void yourMethod() {
ex.submit(new Runnable() {
public void run() {
// Your logic
}
});
}
现在即使多次调用yourMethod
,第一个线程也必须在后续线程开始之前完成。