다 중 스 레 드 차단 대기 열 시험 문제
6172 단어 다 중 스 레 드
public class Test {
public static void main(String[] args) {
BlockingQueue queue=new ArrayBlockingQueue(16);
for(int i=0;i<4;i++){
new Thread(new Runnable(){
@Override
public void run() {
while(true){
String logs;
try {
logs = queue.take();
Test.parseLog(logs);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
System.out.println("begin:"+(System.currentTimeMillis()/1000));
for(int i=0;i<16;i++){
final String logs=""+(i+1);
//Test.parseLog(logs);
try {
queue.put(logs);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void parseLog(String log){
System.out.println(log+":"+(System.currentTimeMillis()/1000));
}
}
2.한 생산자 가 10 개의 대상 을 생산 하고 10 개의 소비자 스 레 드 를 만 들 며 1 초 에 한 개의 대상 을 취하 고 대상 을 얻 는 것 은 생산 순서에 따라 야 한다.
package com.zyyw.service.dispatch;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Semaphore;
import java.util.concurrent.SynchronousQueue;
public class Test {
public static void main(String[] args) {
Semaphore order=new Semaphore(1);
final SynchronousQueue queue=new SynchronousQueue();
for(int i=0;i<10;i++){
new Thread(new Runnable(){
@Override
public void run() {
try {
order.acquire();
String input=queue.take();
String output=TestDo.doSome(input);
System.out.println(Thread.currentThread().getName()+":"+output);
order.release();
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
System.out.println("begin:"+(System.currentTimeMillis()/1000));
for(int i=0;i<10;i++){
String input=i+"";
try {
queue.put(input);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class TestDo{
public static String doSome(String input){
try{
Thread.sleep(1000);
}catch(Exception e){
e.printStackTrace();
}
String output=input+":"+(System.currentTimeMillis()/1000);
return output;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA 다 중 스 레 드 메커니즘 의 스 레 드 생 성target 을 실행 대상 으로 지정 한 name 을 이름 으로 하고 group 에서 참조 하 는 스 레 드 그룹의 일원 으로 새 Thread 대상 을 할당 합 니 다. 이 스 레 드 가 독립 된 Runnable 실...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.