日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?

發布時間:2024/3/26 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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()來獲取子線程執行結束的返回值

public class ThreadDemo03 {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubCallable<Object> oneCallable = new Tickets<Object>();FutureTask<Object> oneTask = new FutureTask<Object>(oneCallable);Thread t = new Thread(oneTask);System.out.println(Thread.currentThread().getName());t.start();}}class Tickets<Object> implements Callable<Object>{//重寫call方法@Overridepublic Object call() throws Exception {// TODO Auto-generated method stubSystem.out.println(Thread.currentThread().getName()+"-->我是通過實現Callable接口通過FutureTask包裝器來實現的線程");return null;} ?? }

程序運行結果:

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/?
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

總結

以上是生活随笔為你收集整理的多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。