あなたは資源の無駄を作成する必要があり、新しいスレッドを起動するたびに、時間はサーバーがすべて、クラッシュする原因になりますあまりにも多くのスレッドが共通のスレッドを作成するにはいくつかの方法がここにありますが、スレッドプールのスレッドを管理する必要があります。
まず、スレッドプールのサイズは固定されていません作成します
これは、必要に応じて、システムがスレッドを作成し、バッファ機能を有するスレッドプールです。タスクが増加すると、タスクを処理するためにスレッドプールのスレッドを増やすことができたときに、スレッドプールのサイズが必要な処理タスクスレッドを超えた場合、スレッドは、スレッドプールにバッファされ、スレッドプールのスレッドが回復し、スレッドプールのスレッドはしませんサイズ制限は、スレッドプールのサイズは、オペレーティング・システムによって異なります。
public class CacheThreadPoolTest { public static void main(String[] args) { ExecutorService es = Executors.newCachedThreadPool(); for (int i = 0; i <10 ; i++) { CacheThreadPoolTest.Threadchi threadchi = new CacheThreadPoolTest.Threadchi(); es.execute(threadchi); } es.shutdown(); } private static class Threadchi implements Runnable{ @Override public void run() { for (int i = 0; i <10 ; i++) { System.out.println(Thread.currentThread().getName()+":"+i); } } } }
第二には、スレッドプール内のスレッドの固定数を作成します
再利用可能なを作成した、スレッドプールの固定数があります。あなたがスレッドを提出するタスクを送信するたびに、スレッドは、スレッドプールのサイズは、新しいスレッドを作成しません到達を知っている、スレッドプールのサイズが安定した後に最大に達し、不変、およびサイトが中止された場合、それは新しいを作成します。スレッド。
/** * @author zhengzheng */ public class FixedThreadPoolTest { public static void main(String[] args) { ExecutorService es = Executors.newFixedThreadPool(3); for (int i = 0; i <10 ; i++) { es.execute(()->{ for (int j = 0; j <2 ; j++) { System.out.println(Thread.currentThread().getName()+":"+j); } }); } es.shutdown(); } }
第三には、シングルスレッドのスレッドプールを作成します
唯一の番号1に追いつくために、順序をコミット、スレッドプールのスレッドを作成することは同じです。
public class SingleThreadExecutorTest { public static void main(String[] args) { ExecutorService es = Executors.newSingleThreadExecutor(); for (int i = 0; i <5 ; i++) { MyThread thread = new MyThread(); es.execute(thread); } es.shutdown(); } private static class MyThread implements Runnable{ @Override public void run() { for (int i = 0; i <3 ; i++) { System.out.println(Thread.currentThread().getName()+":"+i); } } } }
第四に、タイマースレッドを作成
プールのサイズを設定することができますスレッドを作成します。このスレッドのサポートと定期的な定期的なタスク。
/** * @author zhengzheng046 */ public class ScheduledThreadPoolTest { public static void main(String[] args) { MyThread task = new MyThread(); ScheduledExecutorService es = Executors.newScheduledThreadPool(2); //参数1:目标对象 参数2:隔多长时间开始执行线程, 参数3:执行周期 参数4:时间单位 es.scheduleAtFixedRate(task,2,4, TimeUnit.SECONDS); //注意.不能执行es.shutdown().否则线程池立即关闭 //es.shutdown(); } private static class MyThread implements Runnable{ @Override public void run() { System.out.println(Thread.currentThread().getName()+"开始执行任务"+System.currentTimeMillis()); } } }