java 스레드 - 스레드 풀

6268 단어 java 학습
1. 스레드 탱크: 프로그램이 새로운 스레드를 시작하면 운영 체제와 상호작용을 해야 하기 때문에 원가가 비교적 높고 스레드 탱크를 사용하면 성능을 잘 향상시킬 수 있다. 특히 대량의 짧은 스레드를 만들 때.스레드 탱크 안의 모든 스레드가 끝난 후에 죽지 않고 다시 스레드 탱크로 돌아가 빈 상태가 되어 다음 대상이 사용하기를 기다린다.2. 어떻게 라인의 코드를 실현합니까?A:스레드 탱크 대상을 만들고 몇 개의 스레드 대상을 만들 것인지 제어합니다.public static Executor Service new Fixed Thread Pool (int n Thread) B: 이 스레드 탱크의 스레드는 실행할 수 있습니다: Runnable 대상이나Callable 대상이 대표하는 스레드는 클래스로 Runnable 인터페이스를 실현할 수 있습니다.C: Future<>submit(Runnable task) Future<> submit(Callable task) D: 종료 스레드 풀 shutdown()
public class ExecutorDemo{
    public static void main(String[] args){
        // , 
        ExecutorService pool = Executors.newFixedThreadPool(2);
        // Rnnable Callable 
        pool.submit(new MyRunnable());
        pool.submit(new MyRunnable());
        // 
        pool.shutdown();
    }
}

class MyRunnable implements Runnable{

    public void run(){
        for(int x=0;x<100;x++){
            System.out.println(Thread.currentThread().getName()+":"+ x);
        }
    }
}

3. Callable: 일반적인 인터페이스를 가지고 있습니다. 일반적인 인터페이스는 Call 방법의 반환값 형식입니다.
public class MyCallable implements Callable{
    public Object call() throw Exception{
        for(int x=0;x<100;x++){
            System.out.println(Thread.currentThread().getName()+":"+ x);
        }   
    }
    return null;
}
class CallableDemo{
    public static void main(String[] args){
        // , 
        ExecutorService pool = Executors.newFixedThreadPool(2);
        // Rnnable Callable 
        pool.submit(new MyCallable());
        pool.submit(new MyCallable());
        // 
        pool.shutdown();
    }
}

4. Callable 구와 소예
public class MyCallable implements Callable<Integer>{
    private int num;
    public MyCallable(int num){
         this.num = num;
    }
    public Integer call() throw Exception{
        int sum = 0;
        for(int x=0;x<= num;x++){
            sum+=x;
        }   
        return sum;
    }   
}

class CallableDemo{
    public static void main(String[] args){
        // , 
        ExecutorService pool = Executors.newFixedThreadPool(2);
        // Rnnable Callable 
        Future f1 = pool.submit(new MyCallable(100));
        Future f2 = pool.submit(new MyCallable(200));
        Integer i1 = f1.get();
        Integer i2 = f2.get();
        System.out.println(i1);
        System.out.println(i2);
        // 
        pool.shutdown();
    }
}

5. 다선정으로 흔히 볼 수 있는 면접문제(1).다선정에는 몇 가지 실현 방안이 있는데, 각각 몇 가지입니까?Thread 클래스를 계승하여 Runnable 인터페이스 확장을 실현합니다:Callable 인터페이스를 실현하고 스레드 탱크와 결합하여 사용합니다.(2).동기화에는 몇 가지 방식이 있는데, 각각 무엇입니까?두 가지.동기화 코드 블록 동기화 방법(3).한 라인을 시작하려면run () 입니까? 아니면 start () 입니까?그것들의 차이는?start(); run (): 실행된 코드를 봉인하여 일반적인 방법으로만 호출하는 Start (): 실행된 코드를 직접 호출하고 JVM에서 자동으로 run () 방법을 호출합니다 (4).sleep()와wait() 방법의 차이점sleep(): 시간을 지정해야 합니다. 자물쇠를 놓지 않아야 합니다(): 시간을 지정하지 않아도 되고, 시간을 지정할 수도 있고, 자물쇠를 놓을 수도 있습니다(5).왜 wait (), notify (), notify All () 등의 방법이 Object 클래스에 정의됩니까?이러한 방법의 호출은 자물쇠 대상에 의존하고 동기화 코드 블록의 자물쇠 대상은 임의의 자물쇠이기 때문이다.Object 코드는 임의의 대상을 안에 정의할 수 있기 때문에 이 안에 정의한다.
(6).스레드의 라이프 사이클 다이어그램 새로 만들기 – 준비 – 실행 - 실행 - 사망 새로 만들기 - 준비 - 실행 - 차단 - 준비 - 실행 - 사망

좋은 웹페이지 즐겨찾기