スレッドの道を作成します。
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个值