多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?
1.多線程有4種實現方法
- 繼承Thread類,重寫run方法
- 實現Runnable接口,重寫run方法,實現Runnable接口的實現類的實例對象作為Thread構造函數的target
- 通過Callable和FutureTask創建線程
- 通過線程池創建線程
同步的實現方面有兩種,分別是synchronized,wait與notify
2.wait():使一個線程處于等待狀態,并且釋放所持有的對象的lock。
sleep():使一個正在運行的線程處于睡眠狀態,是一個靜態方法, * 調用此方法要捕捉InterruptedException異常 * 。
notify():喚醒一個處于等待狀態的線程,注意的是在調用此方法的時候,并不能確切的喚醒某一個等待狀態的線程 ,而是由JVM確定喚醒哪個線程,而且不是按優先級??。
? ?notifyAll():喚醒所有處入等待狀態的線程,注意并不是給所有喚醒線程一個對象的鎖,而是讓它們競爭。
3.
方式1:繼承Thread類的線程實現方式如下:
public class ThreadDemo01 extends Thread{public ThreadDemo01(){//編寫子類的構造方法,可缺省}public void run(){//編寫自己的線程代碼System.out.println(Thread.currentThread().getName());}public static void main(String[] args){?ThreadDemo01 threadDemo01 = new ThreadDemo01();?threadDemo01.setName("我是自定義的線程1");threadDemo01.start(); ? ? ??System.out.println(Thread.currentThread().toString()); ?} }
程序結果:?
Thread[main,5,main]?
我是自定義的線程1
線程實現方式2:通過實現Runnable接口,實現run方法,接口的實現類的實例作為Thread的target作為參數傳入帶參的Thread構造函數,通過調用start()方法啟動線程
public class ThreadDemo02 {public static void main(String[] args){?System.out.println(Thread.currentThread().getName());Thread t1 = new Thread(new MyThread());t1.start();?} }class MyThread implements Runnable{@Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println(Thread.currentThread().getName()+"-->我是通過實現接口的線程實現方式!");} ?? }程序運行結果:?
main?
Thread-0–>我是通過實現接口的線程實現方式!
線程實現方式3:通過Callable和FutureTask創建線程?
a:創建Callable接口的實現類 ,并實現Call方法?
b:創建Callable實現類的實現,使用FutureTask類包裝Callable對象,該FutureTask對象封裝了Callable對象的Call方法的返回值?
c:使用FutureTask對象作為Thread對象的target創建并啟動線程?
d:調用FutureTask對象的get()來獲取子線程執行結束的返回值
程序運行結果:
main?
Thread-0–>我是通過實現Callable接口通過FutureTask包裝器來實現的線程
線程實現方式4:通過線程池創建線程
public class ThreadDemo05{private static int POOL_NUM = 10; ? ? //線程池數量/*** @param args* @throws InterruptedException?*/public static void main(String[] args) throws InterruptedException {// TODO Auto-generated method stubExecutorService executorService = Executors.newFixedThreadPool(5); ?for(int i = 0; i<POOL_NUM; i++) ?{ ?RunnableThread thread = new RunnableThread();//Thread.sleep(1000);executorService.execute(thread); ?}//關閉線程池executorService.shutdown();?} ??}class RunnableThread implements Runnable ? { ? ??@Overridepublic void run() ?{ ?System.out.println("通過線程池方式創建的線程:" + Thread.currentThread().getName() + " "); ?} ? } ?
原文:https://blog.csdn.net/u011480603/article/details/75332435/?
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
總結
以上是生活随笔為你收集整理的多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 仿淘宝后台设置商品SKU
- 下一篇: GAMS学习笔记02——GAMS读取Ex