在书上看到了一个好方法,当多个线程并发时,可以用scheduleAtFixedRate来管理,scheduleAtFixedRate定时执行一次任务,是重复执行,而ScheduledThreadPoolExecutor将只执行一次任务,
如果你有多个任务,同时进行,并且,是定时的执行,那么以下的程序,完全可以满足你的要求:
import java.util.concurrent.*;
import java.util.*;
public class TestGreenhouseScheduler {
private volatile boolean light = false;
private volatile boolean water = false;
private String thermostat = "Day";
public synchronized String getThermostat() {
return thermostat;
}
public synchronized void setThermostat(String value) {
thermostat = value;
}
//运行一次任务
ScheduledThreadPoolExecutor scheduler = new ScheduledThreadPoolExecutor(10);
public void schedule(Runnable event, long delay) {
scheduler.schedule(event, delay, TimeUnit.MILLISECONDS);
}
public void repeat(Runnable event, long initialDelay, long period) {
//scheduleAtFixedRate 定时执行一次任务,是重复执行
scheduler.scheduleAtFixedRate(event, initialDelay, period,
TimeUnit.MILLISECONDS);
}
class LightOn implements Runnable {
int j=0;
public void run() {
// Put hardware control code here to
// physically turn on the light.
System.out.println("Turning on lights"+"执行了"+(j++));
light = true;
}
}
class LightOff implements Runnable {
public void run() {
// Put hardware control code here to
// physically turn off the light.
System.out.println("Turning off lights");
light = false;
}
}
class WaterOn implements Runnable {
public void run() {
// Put hardware control code here.
System.out.println("Turning greenhouse water on");
water = true;
}
}
class WaterOff implements Runnable {
public void run() {
// Put hardware control code here.
System.out.println("Turning greenhouse water off");
water = false;
}
}
class ThermostatNight implements Runnable {
int j=0;
public void run() {
// Put hardware control code here.
System.out.println("Thermostat to night setting"+"执行了"+(j++));
setThermostat("Night");
}
}
class ThermostatDay implements Runnable {
public void run() {
// Put hardware control code here.
System.out.println("Thermostat to day setting");
setThermostat("Day");
}
}
class Bell implements Runnable {
int j= 0;
public void run() {
System.out.println("Bing!"+"执行了"+(j++));
}
}
class Terminate implements Runnable {
public void run() {
System.out.println("Terminating");
scheduler.shutdownNow(); //结束线程
// Must start a separate task to do this job,
// since the scheduler has been shut down:
new Thread() {
public void run() {
//最后一次执行
System.out.println("nowww");
}
}.start();
}
}
public static void main(String[] args) {
TestGreenhouseScheduler gh = new TestGreenhouseScheduler();
gh.schedule(gh.new Terminate(), 1000*7); //7秒运行一次任务,这里只执行一次
gh.repeat(gh.new Bell(), 0, 1000);//1秒执行一次任务,是重复执行
gh.repeat(gh.new ThermostatNight(), 0, 2000);
gh.repeat(gh.new LightOn(), 0, 3000);
}
}
---结果7秒之后,结束所有的线程,你看Bing执行了7次---
Bing!执行了0
Thermostat to night setting执行了0
Turning on lights执行了0
Bing!执行了1
Thermostat to night setting执行了1
Bing!执行了2
Bing!执行了3
Turning on lights执行了1
Bing!执行了4
Thermostat to night setting执行了2
Bing!执行了5
Bing!执行了6
Thermostat to night setting执行了3
Turning on lights执行了2
Terminating
Bing!执行了7
nowww
分享到:
相关推荐
在Java编程中,多线程并发是提升程序执行效率、充分利用多核处理器资源的重要手段。本文将基于"java 多线程并发实例"这个主题,深入探讨Java中的多线程并发概念及其应用。 首先,我们要了解Java中的线程。线程是...
总之,Java模拟线程并发是一个广泛且深入的话题,涵盖了线程的创建、同步、管理和高级并发工具的使用。理解和熟练应用这些知识,能够帮助开发者编写出高效、安全的多线程程序。在实际开发中,应根据具体需求选择合适...
java多线程并发的在新窗口
但同时,多线程并发也会引入一些问题,如数据竞争和同步问题。 为了解决这些问题,Java提供了多种同步机制。`synchronized`关键字用于控制对共享资源的访问,确保同一时间只有一个线程可以执行特定代码块,从而避免...
java多线程并发编程知识导图笔记.xmind
java多线程并发控制[参照].pdf
总结来说,Java多线程并发实战和源码的学习涵盖了线程创建与管理、同步机制、并发容器、内存模型以及并发工具类等多个方面。虽然书中实例不足,但通过结合其他资源,如jcip-examples-src.rar中的代码,可以进一步...
并发库高级应用\多线程\Java
Java多线程与并发编程是Java开发中至关重要的一部分,它涉及到如何高效地利用CPU资源,以实现程序的并行执行。在操作系统层面,多任务和多进程是通过分配不同的内存空间来实现的,而线程则共享同一进程的内存,这...
java多线程与高并发java多线程与高并发java多线程与高并发
实现多线程的并发执行,能演示操作系统的时间转轮调度算法对多线程程序执行的影响效果,能控制一个或多个线程的执行情况。
综上所述,"java多线程查询数据库"是一个涉及多线程技术、线程池管理、并发控制、分页查询等多个方面的复杂问题。通过理解和掌握这些知识点,我们可以有效地提高数据库操作的效率和系统的响应速度。
Java多线程与并发编程是Java语言中用于处理多任务执行的关键技术,它能够帮助开发者设计出能够有效应对高并发请求的应用程序。在现代的线上(Online)和离线(Offline)应用中,合理利用多线程技术可以大幅提高系统...
NULL 博文链接:https://toknowme.iteye.com/blog/2212529
### Java多线程并发实战知识点解析 #### 一、引言 在计算机科学领域,**多线程**和**并发...通过深入理解Java多线程并发的基础知识及其内存管理机制,开发者可以更好地设计和优化多线程应用,提高系统的性能和稳定性。
本文将围绕“Java多线程高并发相关资料收集”这一主题,详细探讨这两个领域的核心知识点。 首先,多线程是指在单个程序中同时执行多个线程。Java提供了一个强大的多线程支持,允许开发者创建、管理和控制多个执行...
通过以上方法,我们可以在Java中有效地利用多线程处理数据库数据,提高程序的并发能力和效率。记得在设计时充分考虑线程间的协作与同步,以及数据库连接的管理和优化,以确保程序的稳定性和性能。
在这里,我们将从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题。 1. 多线程和并发问题 在 Java 中,多线程和并发问题是非常重要的。面试官通常会问一些...
本项目聚焦于使用Java的Socket进行多线程并发控制,并结合Hibernate ORM框架与MySQL数据库进行数据存储。下面将详细阐述这些技术及其应用。 首先,Java Socket是Java提供的用于实现网络上不同计算机间进程通信的...