1. 많은 스레드가 작업을 큐에 추가합니다.
2. 하나 이상의 스레드가 대기열에 있는 작업을 하나씩 실행합니다.
다음 사항을 고려하십시오.
1. 작업이 없는 경우 큐 실행 스레드가 대기 중입니다.
2. 작업이 추가되면 큐 실행 스레드가 활성화되어 모두 실행됩니다. 작업의 실행을 먼저 잡고 다른 모든 작업을 기다립니다.
작은 예제입니다.
Parcel?org
Import?Java . util . 연결된 목록;
Import? java . util . list;
Public? class? queue? {
public? static? list& lt task& gt? queue? =? New?LinkedList & lt task& gt();
/**
? *? 가정? 매개변수 o? 이 작업에 대한
? *? @param?o
? */
Male? Static? void? Supplement? (Tasks?t){
Sync? (Queues.queue)? {
queues . queue . add(t); ? // 작업 추가
queues . queue . notifyall(); // 큐의 해당 실행 스레드를 활성화하고 모두 실행합니다.
}
}
Static? Class? Tasks{
Public? Voiding? test(){
System.out.println("I was executed");
}
}
}
}Package?org
Import?Java . util . List;
Public? Class? exec? ware? Runable{
@override
Public? Void? run()? {
while(true){
Sync? (Queues.queue)? {
while(Queues.queue.isEmpty()){? //
Try ? {
queues . queue . wait(); ? // 큐가 비어있을 때 스레드를 기다리게 합니다.
}? Catch ? (인터럽트 예외 ?e)? {
e . printstacktrace();
}
System.out.println("Wait...")
}
Queues. Task ?t = ?queues . queue . remove(0); ? // 첫 번째
t . test(); ? // 이 작업 실행
system . out . println(" end ");
}
}
}
Male? Static? void? main(String[]? args)? {
Exec?e?=? New?exec();
무엇을 위해? (int?me? =?0;? me? & lt?2;?i++)? {
New ? thread(e). start(); ? //비어있는 큐에서 실행이 시작되어 대기 중입니다.
}
// 위의 두 스레드를 시작하여 큐에 있는 작업을 선착순으로 실행합니다.
//작업 테스트 추가
큐. Task?t? = new? Queue. task();
queues . add(t); ? // 이 메서드를 실행하고 해당 큐를 모두 활성화하면 두 개의 스레드가 실행을 시작합니다.
}
위는 매우 간단한 예제입니다.