日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

通俗易懂两种常用的多线程实现方式——Java并发系列学习笔记

發(fā)布時(shí)間:2024/2/28 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通俗易懂两种常用的多线程实现方式——Java并发系列学习笔记 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

如果我們想執(zhí)行多線程操作,通常有兩種方法

一. 繼承Thread類方式


步驟:

  • 自定義類繼承Thread
  • 覆蓋Thread中的run()方法
  • 創(chuàng)建該類的對(duì)象,調(diào)用start()方法,開(kāi)啟線程并調(diào)用run方法

  • class MyThread extends Thread{ private int ticket=10; public void run(){ for(int i=0;i<20;i++){ if(this.ticket>0){ System.out.println("賣票:ticket"+this.ticket--); } } } };public class ThreadTicket { public static void main(String[] args) { MyThread mt1=new MyThread(); MyThread mt2=new MyThread(); MyThread mt3=new MyThread(); mt1.start();//每個(gè)線程都各賣了10張,共賣了30張票 mt2.start();//但實(shí)際只有10張票,每個(gè)線程都賣自己的票 mt3.start();//沒(méi)有達(dá)到資源共享 } }

    ?

    二. 實(shí)現(xiàn)Runnable接口


    步驟:

  • 定義一個(gè)實(shí)現(xiàn)Runnable接口的類
  • 覆蓋run方法
  • 創(chuàng)建該類對(duì)象,并以該類對(duì)象為參數(shù)創(chuàng)建Thread類的對(duì)象,從而創(chuàng)建了一個(gè)線程
  • 調(diào)用start方法,開(kāi)啟線程并調(diào)用run方法。

  • package org.demo.runnable; class MyThread implements Runnable{ private int ticket=10; public void run(){ for(int i=0;i<20;i++){ if(this.ticket>0){ System.out.println("賣票:ticket"+this.ticket--); } } } } package org.demo.runnable; public class RunnableTicket { public static void main(String[] args) { MyThread mt=new MyThread(); new Thread(mt).start();//同一個(gè)mt,但是在Thread中就不可以,如果用同一 new Thread(mt).start();//個(gè)實(shí)例化對(duì)象mt,就會(huì)出現(xiàn)異常 new Thread(mt).start(); } };

    三. 總結(jié)

    采用繼承Thread類方式:
    (1)優(yōu)點(diǎn):編寫簡(jiǎn)單,如果需要訪問(wèn)當(dāng)前線程,無(wú)需使用Thread.currentThread()方法,直接使用this,即可獲得當(dāng)前線程。
    (2)缺點(diǎn):因?yàn)榫€程類已經(jīng)繼承了Thread類,所以不能再繼承其他的父類。

    采用實(shí)現(xiàn)Runnable接口方式:
    (1)優(yōu)點(diǎn):線程類只是實(shí)現(xiàn)了Runable接口,還可以繼承其他的類。在這種方式下,可以多個(gè)線程共享同一個(gè)目標(biāo)對(duì)象,所以非常適合多個(gè)相 同線程來(lái)處理同一份資源的情況,從而可以將CPU代碼和數(shù)據(jù)分開(kāi),形成清晰的模型,較好地體現(xiàn)了面向?qū)ο蟮乃枷搿?br /> (2)缺點(diǎn):編程稍微復(fù)雜,如果需要訪問(wèn)當(dāng)前線程,必須使用Thread.currentThread()方法。

    局限:
    在并發(fā)編程中,我們經(jīng)常用到非阻塞的模型,在上述的兩種多線程實(shí)現(xiàn)中,不管是繼承thread類還是實(shí)現(xiàn)runnable接口,都無(wú)法保證獲取到之前的執(zhí)行結(jié)果。通過(guò)實(shí)現(xiàn)Callback接口,并用Future可以來(lái)接收多線程的執(zhí)行結(jié)果。

    總結(jié)

    以上是生活随笔為你收集整理的通俗易懂两种常用的多线程实现方式——Java并发系列学习笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。