다선정에 대한 사고
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에 따라 라이센스가 부여됩니다.