다선정에 대한 사고
1. Thread
public class myThread_1 extends Thread{
@Override
public void run(){
System.out.println("My thread is running");
}
public void createThread_1(){
Thread thread = new Thread();
thread.start();
}
public void createThread_1_1(){
Thread thread = new Thread(){
@Override
public void run(){
System.out.println("Thread Running");
}
};
thread.start();
}
}
2. Runnable
public class myThread_2 implements Runnable {
@Override
public void run() {
System.out.println("MyRunnable running");
}
public void createMyThread_2(){
Thread thread = new Thread(new myThread_2());
thread.start();
}
public void createMyThread_2_1(){
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("MyRunnable running");
}
};
Thread thread = new Thread(runnable);
thread.start();
}
}
3. Callable
public class myThread_3{
public void createCallableThread_3 (){
Callable callable = new Callable() {
@Override
public Integer call() throws Exception {
return new Random().nextInt(100);
}
};
FutureTask future = new FutureTask(callable);
new Thread(future).start();
try {
Thread.sleep(5000);
System.out.println(future.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
Runnable() 및 Callable() 방법
어떻게 스레드 간의 통신을 다중 스레드에서 실현할 것인가는 불가피하게 스레드 간의 통신을 통해 완성해야 한다.여기에 언급된 개념은:thread.join(), object.wait(), object.notify (), CountdownLatch, CyclicBarrier,FutureTask,Callable 예를 들어 어떻게 두 라인을 순서대로 실행합니까?우리는thread를 사용할 수 있다.join().
public void demo_join(){
final Thread A = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("A is running");
}
});
Thread B = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("B is waiting A");
try {
A.join();
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println("B is running");
}
});
B.start();
A.start();
}
그러면 어떻게 두 노선을 지정된 방식에 따라 질서정연하게 교차 운행하게 합니까?
public void demo_notify(){
final Object lock = new Object();
Thread A = new Thread(new Runnable() {
@Override
public void run() {
synchronized(lock){
System.out.println("A-1");
try{
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("A-2");
}
}
});
Thread B = new Thread(new Runnable() {
@Override
public void run() {
synchronized(lock){
System.out.println("B-1");
lock.notify();
System.out.println("B-2");
}
}
});
A.start();
B.start();
}
4개의 스레드 A B C D, 그 중에서 D는 A B C가 모두 실행된 후에야 실행되고 A B C는 동기화되어 실행된다.
public void demo_countDownlatch(){
int worker = 3;
final CountDownLatch countDownLatch = new CountDownLatch(worker);
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("D is waiting for other three threads");
try {
countDownLatch.await();
System.out.println("D is running");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
for (char threadName='A'; threadName <= 'C'; threadName++) {
final String tN = String.valueOf(threadName);
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(tN + "is working");
try {
Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(tN + "finished");
countDownLatch.countDown();
}
}).start();
}
}
세 선수는 각자 준비를 하고, 세 사람이 모두 준비가 다 된 후에 함께 뛴다.
public void demo_CyclicBarrier(){
int runner = 3;
final CyclicBarrier cyclicBarrier = new CyclicBarrier(runner);
for(char name='A';name<='C';name++){
final String name_temp = String.valueOf(name);
new Thread(new Runnable() {
@Override
public void run() {
try {
cyclicBarrier.await();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
}
});
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.