在今天的工作中,我遇到了volatileJava中的关键字.我不太熟悉它,我发现了这个解释:
鉴于该文章解释了相关关键字的详细信息,您是否使用过它,或者您是否曾经看到过以正确方式使用此关键字的情况?
Thread currentThread=Thread.currentThread();
public void run()
{
while(!shutdown)
{
try
{
System.out.println(currentThread.isAlive());
Thread.interrupted();
System.out.println(currentThread.isAlive());
if(currentThread.isAlive()==false)
{
shutdown=true;
}
}
catch(Exception e)
{
currentThread.interrupt();
}
}
}
});
thread.start();
Run Code Online (Sandbox Code Playgroud) 所以我创建了一个线程
Thread personThread = new Thread(Person);
personThread.start();
/** Now to stop it **/
personThread.stop();
Run Code Online (Sandbox Code Playgroud)
问题是,当我尝试编译时,我得到:warning: [deprecation] stop() in Thread has been deprecated.据我所知,这已经不再使用了.那我怎么能完全停止一个线程,与它的状态无关呢?
我有运行的线程,我想停止,稍后在恢复.我学会了不使用stop()等,因为这些已被弃用,并且下面的代码似乎成功停止了线程.它只是退出运行方法.现在,我该如何重新启动它?如果我调用start()方法,它说该线程仍在运行,那么在这种情况下会直接调用run()吗?会不会引起任何问题?BTW这适用于Android应用程序,如果这有任何区别.
private volatile stopThread;
public void stopButton() {
// this is called when button is clicked
// and thread is already started and running
stopThread= true;
}
public void run() {
while (!stopThread) {
// do something here
}
stopThread=false;
}
Run Code Online (Sandbox Code Playgroud)
编辑:它是一个在线程启动时启动的计时器,然后可以暂停并重新启动.所以timer是一个包含Thread对象的类(我已经使用SurfaceView扩展了类).
这是停止线程的好例子. 如何优雅地停止java线程? - 感谢同性恋者:)但是当我尝试检查这个例子时,我收到了无限循环.你能帮助我吗?这是我的代码
public class Num{
public void crash(ManualStopping t1) {
t1.stopMe();
}
public static void main(String [] args) {
Num num = new Num();
ManualStopping t1 = new ManualStopping();
t1.run();
System.out.println("Main thread");
num.crash(t1);
}
Run Code Online (Sandbox Code Playgroud)
}
class ManualStopping extends Thread{
volatile boolean finished = false;
public void stopMe(){
finished = true;
}
public void run() {
while(!finished){
System.out.println("I'm alive");
}
}
Run Code Online (Sandbox Code Playgroud)
}