通过改变数据库字段的状态,使用volatile关键字特性可以让一个线程去终止另一个正在运行的线程停止
1、一个线程正在执行一个无线循环的任务,怎样让其停下来?
@RestController
public class VolatileController {
private Thread1 t1;
@Autowired
private ProductService productService;
@RequestMapping("/make")
public String makeThreadByVolatile() throws InterruptedException {
//启动一直会运行的线程
t1 = new Thread1();
Thread tt1 = new Thread(t1);
tt1.start();
return "1";
}
//定时去数据库取状态,为false则取执行Thread0,改变volatile修饰的flag的值为false,由于被volatile修饰的关键字线程之间内存可见,线程Thread1中的while循环就会被终止
@Scheduled(fixedRate = 3000)
public void task(){
System.out.println("3秒定时任务====================================================");
Map<String,String> map = productService.selectFlagStatus();
if("false".equals(map.get("1001"))){
//去终止Thead1不断运行的线程
Thread0 t0 = new Thread0(t1);
Thread tt2 = new Thread(t0);
tt2.start();
}
}
}
2、线程1
public class Thread1 implements Runnable {
private volatile boolean flag = true;
public void stop(){
flag = false;
}
@Override
public void run() {
while(flag)
System.out.println("我一直在奔跑。。。");
}
}
3、线程0
public class Thread0 implements Runnable{ private Thread1 t; public Thread0(Thread1 t) { this.t = t; } @Override public void run() { /*try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); }*/ t.stop();//终止线程Thread1 } }
- 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq
- java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?
- 【Java面试题】23 java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?
- synchronized 关键字,代表这个方法加锁,相当于不管哪一个线程A每次运行到这个法时,都要检查有没有其它正在用这个方法的线程B(或者C D等),有的话要等正在使用这个方法的线程B(或者C D)运行完这个方法后再运行此线程A,没有的话,直接运行 它包
- java 停止一个正在运行的线程
- java开发线程篇1:java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?
- 如何停止一个正在运行的java线程
- Java再学习——停止一个正在运行的线程
- 创建一个程序读入和显示视频文件,并可以使用滑动条控制视频文件的播放。一个滑动条用来控制视频播放位置,以10为步长跳进。另一个滑动条用来控制停止/播放
- 可以在mono下运行的一个ajax web小程序,使用PostgreSQL作为数据库(期待MonoDevelop 2.0)
- Win32线程——在某个线程内终止另一个正在运行的线程(2)(Event对象)
- java 中有几种方法可以实现一个线程? 用什么关键字修 饰同步方法? stop()和 suspend()方法为何不推荐使用?
- java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?
- 多个线程可能会试图同时访问某个对象。在多个线程同时争相访问某个对象的同时,如果一个线程修改了资源,有些线程可能会收到无效状态。例如,如果某个线程读取对象的字段,同时另一线程正在修改该字段,则第一个线程可能会收到无效的字段状态。这种情况称为竞用情况。
- 如何停止一个正在运行的java线程?
- java中有几种方法可以实现一个线程?用什么关键字修饰同步方法 stop()和suspend()方法为何不推荐使用?
- Win32线程——在某个线程内终止另一个正在运行的线程(1)
- 异常信息:CLR无法从COM 上下文0x645e18 转换为COM上下文0x645f88,这种状态已持续60秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows 消息的情况下处理一个运行时间非常长的操作.这种情况通常会影响到性能,甚至可能导致应用程序不响应或者使用的内存随时间不断累积
- Java 有几程方法可以实现一个线程?用什么关键字修饰同步?stop()和suspend()为什么不推荐使用?
- 如何停止一个正在运行的java线程