java suspend()的问题
发布网友
发布时间:2022-04-23 02:27
我来回答
共3个回答
热心网友
时间:2023-10-11 17:55
suspend()该方法在jdk1.6中已经不推荐使用了,过时了。如果是非阻塞线程只加①句,“使用一个共享变量,线程周期性检测这一变量的值”。如果线程被阻塞,它便不能核查共享变量,也就不能停止。因此不加①只加②即可实现。
class A extends Thread
{
volatile boolean stop = false;
static class B
{
public void () throws Exception
{
A thread = new A();
System.out.println("Starting thread...");
thread.start();
Thread.sleep(3000);
System.out.println("Asking thread to stop...");
thread.stop = true; // ①
thread.interrupt(); // ②
Thread.sleep(3000);
System.out.println("Stopping application...");
// System.exit( 0 );
}
}
public void run()
{
while (!stop)
{
System.out.println("Thread running...");
try
{
Thread.sleep(1000); // 模拟线程被阻塞
}
catch (InterruptedException e)
{
System.out.println("Thread interrupted...");
}
}
System.out.println("Thread exiting under request...");
}
}追问额,有点看不懂,我的程序里有两个线程需要用到一个共同的变量的,这里变量可以用来判断什么时候线程该挂起。我只是想知道,该怎么挂起线程
A thread = new A();到这里需要传参,不会
热心网友
时间:2023-10-11 17:55
suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此 时,其他任何线程都不能访问锁定的资源,除非被"挂起"的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就 会造成死锁。所以不应该使用suspend(),而应在自己的Thread类中置入一个标志,指出线程应该活动还是挂起。若标志指出线程应该挂起,便用 wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程。
热心网友
时间:2023-10-11 17:56
挂起操作,不是停止,是暂停而已
要想停止就是追问嗯,我知道是挂起操作,表述错误。但是我的类B是静态的,不能直接在里面调用suspend()方法,这里该怎么做呢