JAVA中如何在调度线程上实现等待和通知
我有一个简单的问题。 我有一个调度线程,它会根据一些条件在列表上执行一些操作。 现在的问题是,当用户选择输入“2”时,调度线程必须等待,当工作完成时,调度线程必须再次启动其进程。这就像一个简单的生产者和消费者问题。但我对调度程序线程感到困惑。提前谢谢。 代码如下:JAVA中如何在调度线程上实现等待和通知,java,multithreading,producer-consumer,scheduledexecutorservice,Java,Multithreading,Producer Consumer,Scheduledexecutorservice,我有一个简单的问题。 我有一个调度线程,它会根据一些条件在列表上执行一些操作。 现在的问题是,当用户选择输入“2”时,调度线程必须等待,当工作完成时,调度线程必须再次启动其进程。这就像一个简单的生产者和消费者问题。但我对调度程序线程感到困惑。提前谢谢。 代码如下: package sample; public class Sample { /** * @param args the command line arguments */ List<Str
package sample;
public class Sample {
/**
* @param args the command line arguments
*/
List<String> list = new LinkedList<>();
public static void main(String[] args) throws IOException {
ScheduledExecutorService service = Executors.newScheduledThreadPool(5);
Parallel p = new Parallel();
service.scheduleAtFixedRate(p, 0, 1000, TimeUnit.SECONDS);
while (true) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
switch (br.read()) {
case 1:
newOrder();
break;
case 2:
replace();
break;
default:
break;
}
}
}
public static void newOrder() {
System.out.println("New Order ");
}
public static void replace() {
System.out.println("Replace");
// pause the scheduled thread
/*
perform actions on the list
*/
// notify the scheduled thread again
}
}
问题是,只要用户输入“2”,列表就会更新。当调度程序线程不断更新列表时。它可以通过迭代来删除元素。当多个用户输入“2”时,此场景会导致太多延迟。每个线程对列表进行操作,更新列表,同时调度程序线程更新列表。我无法使调度程序线程停止,因为它必须连续执行工作,但当用户输入“2”时,我可以做什么使调度程序线程暂停,直到用户操作完成?一个简单的解决方案:让调度任务一直运行,但让它在每次唤醒时检查一个标志。如果将标志设置为一种方式,它将执行其常规工作,但如果将标志设置为另一种方式,它将不执行任何操作 然后,UI只需根据任务是否应“运行”设置标志值。请详细说明
为什么必须等待
应该做什么工作完成了
Collections.synchronizedList()
scheduleAtFixedRate
,而是使用scheduleWithFixedDelay
谢谢你,巴克斯。问题是,只要用户输入“2”,列表就会更新。当调度程序线程不断更新列表时。它可以通过迭代来删除元素。当多个用户输入“2”时,此场景会导致太多延迟。每个线程对列表进行操作,更新列表,同时调度程序线程更新列表。我无法使调度程序线程停止,因为它必须连续执行工作,但当用户输入“2”时,我可以如何使调度程序线程暂停,直到用户操作完成?
package sample;
public class Parallel implements Runnable{
@Override
public void run(){
System.out.println("Inside thread");
//do operations on list
}
}