Javaのマルチスレッド学習記録---スレッドを作成します。

スレッドの道を作成します。

1、継承Threadクラス

class MyThread extends Threads{
	@Override
    public void run() {}
}
//------------------------
//调用方式
MyThread thread = new MyThread();
thread.start();

2、Runnableを実装します

class MyThread implements Runnable{
	@Override
    public void run() {}
}
//------------------------
//调用方式
MyThread myThread = new MyThread();
Thread thread = new Thread(myThread);
thread.start();

分析:のみ実行、Runnableインタフェースの定義は、()抽象メソッドを定義するので、無start()メソッドを作成するスレッドのRunnableインタフェースを実装することにより、()メソッドを起動しない、
とThreadクラスが実装する、Runnableインタフェース、及び開始を定義()メソッドは、スレッドを開始するために使用され、スレッドは、スレッドを開始するstart()メソッドのいずれかを使用して、Runnableインタフェーススレッドオブジェクトを作成するためにパッケージを使用する必要があります

図3に示すように、匿名の内部クラスのRunnableインターフェースを介してスレッドオブジェクトを作成します

Thread thread = new Thread(new Runnable(){
	@Override
    public void run() {}
});
thread.start();

4、スレッドプールによって作成されました

スレッドプールの種類:

1.キャッシュ可能なスレッドプールnewCachedThreadPool
(スレッドは、再利用スレッドの最終的な数SOおよび作成されたスレッドの数にコードを作成することができる異なると予想されます)

//创建一个可缓存的线程池
ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();
for (int i = 0; i < 10; i++) {
     final int temp = i;
     //通过线程池创建线程
     newCachedThreadPool.execute(new Runnable() {
         @Override
         public void run() {
             System.out.println("threadName:"+Thread.currentThread().getName()+",i:"+temp);
         }
     });
 }
//最终可以观察到输出结果中,i会出现重复的,即线程被重复利用了

2. newFixedThreadPool固定長スレッドプール
(作成Nコードは、実際には後にのみプール内のスレッドプールが多重のスレッドのスレッドを作成)

//创建一个固定长度的线程池,方法的参数为线程池中线程的个数
 ExecutorService newFixedThreadPool = Executors.newFixedThreadPool(3);
 for (int i = 0; i < 10; i++) {
     final int temp = i;
     //通过线程池创建线程
     newFixedThreadPool.execute(new Runnable() {
         @Override
         public void run() {
             System.out.println("threadName:"+Thread.currentThread().getName()+",i:"+temp);
         }
     });
 }
//最终可以观察到输出结果中,i只有三个值,因为设置了线程个数为3

3.固定長スレッドプールnewScheduledThreadPool
(固定長スレッドプールに基づいて周期的タスク実行タイミングとサポートは、タイミング機能を追加)

ScheduledExecutorService newScheduledThreadPool = Executors.newScheduledThreadPool(3);
for (int i = 0; i < 10; i++) {
    final int temp = i;
    //通过线程池创建线程
    newScheduledThreadPool.schedule(new Runnable() {
        @Override
        public void run() {
            System.out.println("threadName:" + Thread.currentThread().getName() + ",i:" + temp);
        }
    }, 3, TimeUnit.SECONDS);//3秒之后,所有线程全部启动
}

4.プールnewSingleThreadExecutorは、スレッド
(唯一のスレッドプールのスレッドがあります)

ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
for (int i = 0; i < 10; i++) {
    final int temp = i;
    //通过线程池创建线程
    singleThreadExecutor.execute(new Runnable() {
        @Override
        public void run() {
            System.out.println("threadName:" + Thread.currentThread().getName() + ",i:" + temp);
        }
    });
}
//停止线程池
singleThreadExecutor.shutdown();
//最终可以观察到输出结果中,i只有1个值
元の記事を公開 ウォンの賞賛0 ビュー6

おすすめ

転載: blog.csdn.net/weixin_39951607/article/details/104653095