亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Java多線程理解

2019-11-14 15:37:01
字體:
來源:轉載
供稿:網友

一、理論概念

進程與線程

進程(PRocess)是計算機中的程序關于某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位。

線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源.

進程有獨立的地址空間,一個進程崩潰后,在保護模式下不會對其它進程產生影響,而線程只是一個進程中的不同執行路徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就等于整個進程死掉,所以多進程的程序要比多線程的程序健壯,但在進程切換時,耗費資源較大,效率要差一些。但對于一些要求同時進行并且又要共享某些變量的并發操作,只能用線程,不能用進程。

 

二、線程的java實現

目前實現java線程有2種方式,繼承Thread類和實現Runnable接口,重寫run方法。

1、實現Runnable接口

實現 Runnable的接口的好處是實現變量的共享,多個線程使用同一個Runable對象,如上代碼塊中的成員變量j:

package src;/** *  * @author Shawn Wang *  */public class MyThread implements Runnable {    private int j = 100;    @Override    public void run() {        while (true) {            if (j > 0) {                System.out.println(Thread.currentThread().getName() + "-- num:"                        + j--);            } else {                break;            }        }    }    public static void main(String[] args) {        MyThread mt = new MyThread();        Thread thread1 = new Thread(mt);        Thread thread2 = new Thread(mt);        Thread thread3 = new Thread(mt);        thread1.start();        thread2.start();        thread3.start();    }}
View Code

輸出結果:

Thread-1-- num:100Thread-3-- num:98Thread-2-- num:99Thread-2-- num:95Thread-3-- num:96Thread-1-- num:97Thread-1-- num:92Thread-1-- num:91Thread-3-- num:93Thread-3-- num:89Thread-3-- num:88Thread-2-- num:94Thread-2-- num:86Thread-2-- num:85Thread-2-- num:84Thread-3-- num:87Thread-3-- num:82Thread-1-- num:90Thread-1-- num:80Thread-3-- num:81Thread-3-- num:78Thread-3-- num:77Thread-3-- num:76Thread-3-- num:75Thread-3-- num:74Thread-2-- num:83Thread-2-- num:72Thread-2-- num:71Thread-2-- num:70Thread-3-- num:73Thread-1-- num:79Thread-3-- num:68Thread-3-- num:66Thread-3-- num:65Thread-2-- num:69Thread-2-- num:63Thread-2-- num:62Thread-2-- num:61Thread-2-- num:60Thread-2-- num:59Thread-2-- num:58Thread-2-- num:57Thread-2-- num:56Thread-2-- num:55Thread-2-- num:54Thread-2-- num:53Thread-2-- num:52Thread-3-- num:64Thread-1-- num:67Thread-3-- num:50Thread-2-- num:51Thread-3-- num:48Thread-1-- num:49Thread-3-- num:46Thread-2-- num:47Thread-3-- num:44Thread-1-- num:45Thread-3-- num:42Thread-2-- num:43Thread-3-- num:40Thread-1-- num:41Thread-3-- num:38Thread-2-- num:39Thread-3-- num:36Thread-1-- num:37Thread-3-- num:34Thread-2-- num:35Thread-3-- num:32Thread-1-- num:33Thread-3-- num:30Thread-2-- num:31Thread-3-- num:28Thread-1-- num:29Thread-3-- num:26Thread-2-- num:27Thread-3-- num:24Thread-1-- num:25Thread-3-- num:22Thread-2-- num:23Thread-3-- num:20Thread-1-- num:21Thread-3-- num:18Thread-2-- num:19Thread-3-- num:16Thread-1-- num:17Thread-3-- num:14Thread-2-- num:15Thread-3-- num:12Thread-1-- num:13Thread-3-- num:10Thread-2-- num:11Thread-3-- num:8Thread-1-- num:9Thread-3-- num:6Thread-2-- num:7Thread-3-- num:4Thread-1-- num:5Thread-3-- num:2Thread-2-- num:3Thread-1-- num:1
result

2、繼承Thread類

package src;public class ThreadClient extends Thread {    public ThreadClient(String name) {        super(name);    }    @Override    public void run() {        // TODO Auto-generated method stub        for (int i = 0; i <= 10; i++) {            System.out.println(currentThread().getName() + ":" + i);        }    }       public static void main(String[] args) {        ThreadClient thread1 = new ThreadClient("thread1");        ThreadClient thread2 = new ThreadClient("thread1");        ThreadClient thread3 = new ThreadClient("thread1");        thread1.start();        thread2.start();        thread3.start();    }}
View Code

輸出結果

thread1:0thread1:1thread1:0thread1:1thread1:0thread1:1thread1:2thread1:3thread1:4thread1:5thread1:6thread1:2thread1:2thread1:3thread1:4thread1:3thread1:4thread1:5thread1:6thread1:7thread1:7thread1:8thread1:9thread1:10thread1:5thread1:6thread1:7thread1:8thread1:9thread1:8thread1:9thread1:10thread1:10
result

疑問:

為什么要重寫 run方法?

run方法時存儲線程所要運行的代碼,不能在直接調用run方法,需要通過start方法來調用。

三、線程同步

場景:如果線程進行了sleep 操作時,其他線程對共享變量做了改變,會造成數據不同步問題。

package src;/** *  * @author Shawn Wang *  */public class MyThread implements Runnable {    private int j = 100;    @Override    public void run() {        while (true) {            if (j > 0) {                try {                    Thread.sleep(1000);// 當前線程休眠1秒                } catch (Exception e) {                    e.printStackTrace();                }                System.out.println(Thread.currentThread().getName() + "-- num:"                        + j--);            } else {                break;            }        }    }    public static void main(String[] args) {        MyThread mt = new MyThread();        Thread thread1 = new Thread(mt);        Thread thread2 = new Thread(mt);        Thread thread3 = new Thread(mt);        thread1.start();        thread2.start();        thread3.start();    }}
View Code

輸出結果:

Thread-1-- num:100Thread-2-- num:99Thread-3-- num:98Thread-1-- num:97Thread-3-- num:95Thread-2-- num:96Thread-1-- num:94Thread-2-- num:92Thread-3-- num:93Thread-3-- num:91Thread-2-- num:90Thread-1-- num:90Thread-3-- num:89Thread-2-- num:88Thread-1-- num:87Thread-3-- num:86Thread-2-- num:85Thread-1-- num:85Thread-3-- num:84Thread-2-- num:83Thread-1-- num:82Thread-3-- num:81Thread-1-- num:80Thread-2-- num:80Thread-3-- num:79Thread-2-- num:77Thread-1-- num:78Thread-3-- num:76Thread-2-- num:75Thread-1-- num:74Thread-2-- num:73Thread-3-- num:71Thread-1-- num:72Thread-2-- num:70Thread-1-- num:69Thread-3-- num:69Thread-2-- num:68Thread-3-- num:66Thread-1-- num:67Thread-2-- num:65Thread-1-- num:64Thread-3-- num:64Thread-2-- num:63Thread-1-- num:62Thread-3-- num:61Thread-2-- num:60Thread-3-- num:58Thread-1-- num:59Thread-2-- num:57Thread-1-- num:56Thread-3-- num:56Thread-2-- num:55Thread-1-- num:54Thread-3-- num:54Thread-2-- num:53Thread-3-- num:52Thread-1-- num:52Thread-3-- num:51Thread-2-- num:50Thread-1-- num:51Thread-3-- num:49Thread-1-- num:48Thread-2-- num:48Thread-3-- num:47Thread-1-- num:46Thread-2-- num:45Thread-1-- num:44Thread-2-- num:42Thread-3-- num:43Thread-3-- num:40Thread-1-- num:39Thread-2-- num:41Thread-2-- num:38Thread-3-- num:37Thread-1-- num:38Thread-1-- num:36Thread-2-- num:35Thread-3-- num:36Thread-1-- num:34Thread-2-- num:33Thread-3-- num:33Thread-1-- num:32Thread-3-- num:30Thread-2-- num:31Thread-1-- num:29Thread-3-- num:29Thread-2-- num:29Thread-3-- num:28Thread-1-- num:28Thread-2-- num:28Thread-1-- num:27Thread-2-- num:26Thread-3-- num:27Thread-1-- num:25Thread-2-- num:24Thread-3-- num:24Thread-1-- num:23Thread-3-- num:22Thread-2-- num:22Thread-1-- num:21Thread-3-- num:20Thread-2-- num:20Thread-1-- num:19Thread-3-- num:18Thread-2-- num:17Thread-3-- num:16Thread-1-- num:15Thread-2-- num:14Thread-2-- num:13Thread-3-- num:12Thread-1-- num:13Thread-2-- num:11Thread-1-- num:10Thread-3-- num:10Thread-2-- num:9Thread-1-- num:7Thread-3-- num:8Thread-2-- num:6Thread-3-- num:5Thread-1-- num:5Thread-2-- num:4Thread-3-- num:3Thread-1-- num:2Thread-2-- num:1Thread-1-- num:0Thread-3-- num:-1
result

出現了負數。

解決加上同步鎖synchronized

同步代碼塊的格式:
    synchronized(對象){
           需要被同步的代碼;
    } 

package src;/** *  * @author Shawn Wang *  */public class MyThread implements Runnable {    private int j = 100;    @Override    public void run() {        while (true) {            synchronized (this) {                if (j > 0) {                    try {                        Thread.sleep(1000);// 當前線程休眠1秒                    } catch (Exception e) {                        e.printStackTrace();                    }                    System.out.println(Thread.currentThread().getName()                            + "-- num:" + j--);                } else {                    break;                }            }        }    }    public static void main(String[] args) {        MyThread mt = new MyThread();        Thread thread1 = new Thread(mt);        Thread thread2 = new Thread(mt);        Thread thread3 = new Thread(mt);        thread1.start();        thread2.start();        thread3.start();    }}
View Code

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
81精品国产乱码久久久久久| 国产欧美最新羞羞视频在线观看| 欧美中文字幕在线观看| 亚洲精品一区二三区不卡| 亚洲精品天天看| 国产精品pans私拍| 国产精品嫩草视频| 欧美综合第一页| 成人免费看黄网站| 久久这里有精品| 欧美一级电影免费在线观看| 青青精品视频播放| 国产在线拍偷自揄拍精品| 亚洲精品videossex少妇| 国产一区二区在线免费| 久久精品美女视频网站| 欧美中文字幕视频在线观看| 国产精品久久久久久久午夜| 久久精品在线视频| 色老头一区二区三区在线观看| 国产91精品不卡视频| 91丝袜美腿美女视频网站| 欧美成人在线免费视频| 欧美资源在线观看| 中文字幕亚洲在线| 国产精品极品在线| 日韩高清免费在线| 日本精品一区二区三区在线播放视频| 欧美成人免费va影院高清| www.久久久久久.com| 欧美成人剧情片在线观看| 国产一区二区久久精品| 在线视频欧美日韩精品| 亚洲人a成www在线影院| 中文字幕日韩在线视频| 欧美大尺度电影在线观看| 亚洲欧美福利视频| 国产日韩欧美电影在线观看| 久久精品国产清自在天天线| 国产成人在线播放| 日韩精品中文字幕在线| 亚洲а∨天堂久久精品喷水| 亚洲精品免费一区二区三区| 4444欧美成人kkkk| 欧美激情2020午夜免费观看| 这里只有精品视频| 国产亚洲精品美女久久久久| 欧美日韩国产麻豆| 亚洲女人被黑人巨大进入| 久久久久中文字幕2018| 久久国产精品首页| 亚洲字幕在线观看| 深夜福利日韩在线看| 国产精品91一区| 欧美放荡办公室videos4k| 日韩av一区在线观看| 午夜精品www| 欧美日韩在线观看视频| 欧美精品免费在线观看| 日韩成人性视频| 亚洲欧美中文日韩v在线观看| 国产精品福利在线| 亚洲精品成a人在线观看| 欧美成人性色生活仑片| 国产成人精品免费视频| 欧洲美女免费图片一区| 欧美又大又粗又长| 国产精品女视频| 91系列在线观看| 国内精品久久久久久| 国产精品久久综合av爱欲tv| 久久影院资源站| 国产精品美女无圣光视频| 欧美美女18p| 成人午夜小视频| 欧美成人精品激情在线观看| 日韩精品视频免费专区在线播放| 国产精品av免费在线观看| 国内精品美女av在线播放| 日本久久久久久久久久久| 亚洲欧美日韩精品久久| 亚洲欧洲免费视频| 久久久久久久一| 欧美日韩中文字幕日韩欧美| 亚洲va欧美va国产综合剧情| 国产色婷婷国产综合在线理论片a| 欧美日韩国产精品专区| 91av在线视频观看| 国内精品中文字幕| 久久免费视频这里只有精品| 国产精品看片资源| 国产一区二区三区视频免费| 国产精品丝袜高跟| 亚洲综合成人婷婷小说| 国产精品欧美一区二区| 国产suv精品一区二区三区88区| 中文字幕亚洲欧美日韩2019| 粉嫩老牛aⅴ一区二区三区| 中文字幕在线看视频国产欧美| 亚洲高清在线观看| 日本精品在线视频| 国产亚洲人成a一在线v站| 久久这里有精品视频| 国产成人精品久久二区二区91| 日韩欧美在线播放| 日韩精品中文在线观看| 成人夜晚看av| 日韩精品福利网站| 国产色视频一区| 精品久久在线播放| 久久天天躁狠狠躁老女人| 亚洲深夜福利网站| 欧美综合国产精品久久丁香| 欧美一级高清免费播放| 国产精品色悠悠| 这里只有视频精品| 97婷婷大伊香蕉精品视频| 最新国产成人av网站网址麻豆| 奇米影视亚洲狠狠色| 97久久精品视频| 一区二区三区视频观看| 美女精品视频一区| 欧美与黑人午夜性猛交久久久| 亚洲午夜色婷婷在线| 欧美成人免费网| 色妞在线综合亚洲欧美| 精品久久香蕉国产线看观看亚洲| xvideos亚洲人网站| 日本精品性网站在线观看| 精品国产一区二区三区久久狼黑人| 日韩电影在线观看免费| 精品久久久久国产| www.色综合| 亚洲а∨天堂久久精品9966| 精品国产欧美成人夜夜嗨| 最近2019免费中文字幕视频三| 黄色成人在线播放| 国产日韩在线看片| 久久成人这里只有精品| 97在线视频国产| 国产日韩综合一区二区性色av| 欧美在线观看视频| 久久成年人免费电影| 美日韩精品免费观看视频| 国内精品小视频| 国内精品久久久久久久久| 国产精品久久久久久久一区探花| 欧美老女人xx| 日韩电视剧在线观看免费网站| 欧美超级免费视 在线| 久久久人成影片一区二区三区| 成人春色激情网| 法国裸体一区二区| 欧美成人免费观看| 91精品久久久久久久久久入口| 国产精品高潮呻吟视频| 国产精品久久久久久久久借妻| 国产丝袜精品第一页| 国产小视频91| 亚洲男人天堂网| 4388成人网| 欧美大人香蕉在线| 日韩在线视频导航| 精品国产乱码久久久久久虫虫漫画|