java如何让线程只运行一次

有这么一个需求,启动了一个线程,如何判断这个线程是否已经启动了,如果启动了就不需要start(),如果没有启动再调用start()

你在启动线程的那个类加一个字段,
线程启动时判断那个字段有没被改过,
如果没被改过就启动线程,启动完去改那个字段,
如果改过了就不需要start了。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-12-15
thread.isAlive()
或者自己弄个标识,run()刚开始置为true,run()最后置为false追问

public void isLock(int i, JavaSense4 sense4) {
Thread t = new Thread(new LisLock(i, sense4));
if(!t.isAlive()) {
t.start();
}
}
但是这样,我每次调用isLock方法的时候还是会又启动一个线程,形成多线程

追答

有没有搞错呀,你每次都新创建一个,当然永远不可能是alive了

追问

那如何只调用一次,第二次再调用的时候存在了就不调用

追答

boolean b = false;
public synchronized void isLock(int i, JavaSense4 sense4) {
if ( b ) return; new Thread(new LisLock(i,sense4)).start();
b = true;
}

本回答被提问者采纳
第2个回答  2013-12-23
判断是否在运行用isAlive方法哈。。

java怎么限制线程只执行一次
使用interrupt方法中断线程。

java如何让线程只运行一次
如果没被改过就启动线程,启动完去改那个字段,如果改过了就不需要start了。

java 如使让一个方法只能调用一次 除非这个方法运行结束
使用Synchronized或者ReetrantLock 也可以在方法内添加标识 在方法开始执行时改变标识状态 方法结束后也改变标识状态 只要当标识符合条件时才执行方法体内容 比如:int status = true;public String getSomeThing(){ var ret = "";if(status ){ status = false;...status = true;return "someT...

java 如何方法限定一个线程使用?
你可以通过synchronized关键字来限制一个方法只能在一个线程执行。你可以将该方法用synchronized关键字修饰,这样当一个线程在执行这个方法时,其他线程将会被阻塞,直到该线程执行完成,其他线程才能继续执行该方法。例如:public synchronized void myMethod(){ \/\/方法执行的代码 } 这里我们使用synchronized关键...

java中怎么让一个线程在每天的23:30这个时刻执行一次?(该程序启动后就...
timer.schedule(你的线程名称,要执行的时间,24*60*60*1000); 你最好去看看timer定时器,以便了解更多

如果我创建一个Java线程,我让他没10分钟执行一次!
给我发个消息留个email吧,我把源码发给你。一个TimerThread 类,源码和注释都很详细,线程的同步做的比较完善。而且是我们项目中正在用的的,经过我们的多次效率上的完善。只要继承这个类,实现两个方法即可。一个方法负责设定时间线程每次执行的时间。一个方法负责设定线程每次执行的内容。

Java线程问题
线程只能调用一次start方法,这将使线程进入待运行状态,等待分配CPU时间片。在线程中的run方法执行完毕后,线程进入死亡状态,该线程生命结束。一个线程对象只可以调用一次start方法。试图在线程死亡后再次调用start方法将抛出IllegalThreadStateException异常。

【java线程同步】结果总是一个线程在走,求教。
你的run加了一个synchronized .一次只能有一个线程执行这个方法。而这个方法又是true.所以。当第一个线程得到 同步锁后,就去执行死循环,一直不会跳出这个方法。别的线程没有机会执行

关于java中线程(Thread)问题?
也就是等待调用该方法的线程执行完毕后再往下继续执行。注意该方法也要捕获异常。3.wait()wait方法用于协调多个线程对共享数据的存取,所以必须在Synchronized语句块内使用wait方法 wait()方法使当前线程暂停执行并释放对象锁标志 参考资料:http:\/\/gatusso52.javaeye.com\/blog\/483973 ...

java 如何调用方法里超过10秒就终止该方法,不往下执行,防止线程阻塞
本来用DWR调用方法就是多线程的,线程总数与J2EE容器配置的有关。建议如下:如果你这个A()调用的接口一次只允许一个访问,那么需要在A所在的类里设置一个静态成员变量,如static String object = "some"。然后在A()方法一开始用synchronized (object){..}把代码都包含进来。这样可以确保一次只有一个...

相似回答