스레드를 만들 수있는 네 가지 방법 (B)

댓글 :

CPU 스케줄링과 작은 단위의 할당은, 기본적인 시스템 자원 낭비와 절차에 필요한 자원의 소수만을 차지하지 않는다.

이 기사는 이전의 세 가지 방법, 마지막 하나는 다음과 같다 말했다 :

스레드 풀 모드에서 스레드를 만들기 :

스레드 풀을 사용하는 이유 :
동시성의 많은, 그리고 각 스레드가 자주 생성하고 스레드를 파괴, 매우 짧은 실행 시간을 초과하는 경우 매우 많은 시간이 소요됩니다. . 그래서이 스레드 풀왔다
스레드 풀 :
작업을 수행 한 후, 파괴 아니지만, 데이터베이스 연결 풀처럼, 다음 작업을 기다리고, 스레드 풀로 돌아갑니다.
풀 사용 규칙 스레드 :
1. 공장 근로자 10 명 있었다 (효과적인 스레드), 각 사람이 하나의 작업을 할 수있는
임무가 왔을 때 2, 할당 된 노동자가해야 할 일. (할당 스레드)
뿐만 아니라 작업에, 그것은 대기 큐에 배치됩니다 (10 명) 근로자가 작업을하고있는 3.
일시 사를 고용하는 새로운 작업을 훨씬 빠르게 노동자가 작업을보다, 당신은 치료를해야하는 경우 속도, 엔지니어링 (스레드 확장)
(14) 근로자의 비율이 충분하지 않은 경우 4. (작업을 수락하지 고려최대 연결 수를 초과)
, (14 명) 근로자는 자유 시간을, 느린 일자리 증가는 (결국, 노동자를 고용 할 수있는 여분의 돈을 사 명 비정규직을 종료 고려할 것확장 스레드 파괴)

스레드 구현을 작성합니다 :
1. 고정 길이의 스레드 풀 :
package com.jym.thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @program: thread
 * @description: 线程池测试类
 * @author: jym
 * @create: 2020/01/27
 */
public class TestThreadPool {
    public static void main(String[] args) {
        // 创建线程池 定长的线程池
        ExecutorService pool = Executors.newFixedThreadPool(5);
        // 将线程交给线程池来管理
        PoolDemo poolDemo = new PoolDemo();
        for(int i=0,j=5;i<j;i++){
            pool.submit(poolDemo);
        }
        // 关闭
        pool.shutdown();
    }
}

class PoolDemo implements Runnable{

    public void run() {
        for (int i = 0, j=10;i<j;i++){
            System.out.println("线程"+Thread.currentThread().getName()+"跑啦");
        }
    }
}
2. 타이밍 스레드 풀 :
package com.jym.thread;

import java.util.concurrent.*;

/**
 * @program: thread
 * @description: 定时的线程池测试类
 * @author: jym
 * @create: 2020/01/27
 */
public class SchedulePoolTest {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // 线程大小为5个
        ScheduledExecutorService pool = Executors.newScheduledThreadPool(5);
        // 调用schedule方法,第一个参数为callable实现类,第二个为时间间隔,第三个为时间单位
        for(int i=0; i<5; i++ ){
            ScheduledFuture<Integer> scheduledFuture = pool.schedule(new Callable<Integer>() {
                public Integer call() throws Exception {
                    int sum = 0;
                    for(int j=0;j<10;j++){
                        sum += j;
                    }
                    return sum;
                }
            },1,TimeUnit.SECONDS);
            System.out.println(scheduledFuture.get());
        }
        pool.shutdown();
    }
}

잘못 공부 시간의 부족, 너무 얕은 지식, 용서해주십시오.

세계에서 사람들이 10 종류가 있습니다, 하나의 바이너리 이해하는 것입니다, 하나는 바이너리 이해하지 않습니다.

게시 71 개 원래 기사 · 원의 찬양 (54) · 전망 420 000 +

추천

출처blog.csdn.net/weixin_43326401/article/details/104095935