线程池:
多线程的创建其中一种就是线程池的创建,线程池有很多种,比如对于线程无上限的(
Executors.newCachedThreadPool();
),有上限的(Executors.newFixedThreadPool(定义线程池中的线程数);
)等等
实体类就很平常:
package com.itjh.pojo;
public class MyExecut implements Runnable{
@Override
public void run() {
for (int i = 1; i <=50; i++) {
System.out.println(Thread.currentThread().getName()+"线程正在芜湖第~~~~~"+i+"~~~~个");
}
}
}
测试类(无上限的线程池创建newCachedThreadPool()
):
package com.itjh.Test;
import com.itjh.pojo.MyExecut;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ExecuTest01 {
public static void main(String[] args) {
//获得线程池对象
ExecutorService executor=Executors.newCachedThreadPool();
//被任务扔进去,会自动启动run方法,代替了之前的.start()方法
executor.submit(new MyExecut());
executor.submit(new MyExecut());
executor.submit(new MyExecut());
executor.shutdown();
}
}
测试类(可以定义线程池中的线程数的方法newFixedThreadPool
):
package com.itjh.Test;
import com.itjh.pojo.MyExecut;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ExecuTest01 {
public static void main(String[] args) {
//获得线程池对象,并且指定线程池中的线程数量
ExecutorService executor=Executors.newFixedThreadPool(2);
//被任务扔进去,会自动启动run方法,代替了之前的.start()方法
executor.submit(new MyExecut());
executor.submit(new MyExecut());
executor.submit(new MyExecut());
executor.shutdown();
}
}
结果:会发现只有两个线程,即使我在测试类中创建3个线程,因为指定的线程数是2(只放一部分上来,不然太多了)
pool-1-thread-1线程正在芜湖第~~~~~42~~~~个
pool-1-thread-1线程正在芜湖第~~~~~43~~~~个
pool-1-thread-1线程正在芜湖第~~~~~44~~~~个
pool-1-thread-1线程正在芜湖第~~~~~45~~~~个
pool-1-thread-2线程正在芜湖第~~~~~46~~~~个
pool-1-thread-2线程正在芜湖第~~~~~47~~~~个
pool-1-thread-2线程正在芜湖第~~~~~48~~~~个
pool-1-thread-2线程正在芜湖第~~~~~49~~~~个
pool-1-thread-2线程正在芜湖第~~~~~50~~~~个
Process finished with exit code 0