java 子线程id,java – 根据Id配置子线程

是的,所以

java无法处理该线程,一个线程只运行直到它终止.

所以:

要摆脱线程,你需要允许线程运行方法结束,然后去掉所有对线程和它构造的Runnable的引用.

你想切换线程整理,一个简单的例子:

class SimpleRunnable implements Runnable {

public volatile boolean run = true; //Volatile for thread safety.

public void run() {

while(run) {

System.out.println("WHOOOO!"); //Boy, will this be annoying

}

}

}

从这个runnable创建一个线程:

SimpleRunnable run = new SimpleRunnable();

Thread thread = new Thread(run);

Thread.start(); //run thread

//Stop thread

run.run=false;

//Thread will be removed when out of scope

您需要在您的情况下为每个用户创建一个Runnable,然后在创建新线程时调用set stop stop变量.

例如,您可以通过userId将每个runnable存储在ConcurrentHashMap中.

ConcurrentHashMap runnablesByUser = new ConcurrentHashMap<>();

public void startNewThreadForUser(String userId){

//Time passes, retrieve and kill old thread:

SimpleRunnable oldRunnable = runnableByUser.get(userId);

if(oldRunnable!=null){

oldRunnable.run=false;

}

SimpleRunnable newRunnableUserOne = new SimpleRunnable();

runnablesByUser.put(userId,newRunnableUserOne);

Thread thread = new Thread(newRunnableUserOne);

thread.start();

}

如果找到,则调用该方法将终止旧线程,通过将其替换为ConcurrentHashMap中的新线程,从范围中释放旧线程,最后启动新线程.

像这样:

public void startThreeThreads(){

startNewThreadForUser("User1");//starts Thread for User1

startNewThreadForUser("User2");//starts Thread for User2

startNewThreadForUser("User1");//Replaces Thread for User1

}

管理运行线程通常在线程池中完成,这在各种方面都很粗糙,但希望它很有用.

如果你愿意,我可以详细说明这个机制.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值