麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

JAVA 多線程機制(一)

2019-11-14 23:36:00
字體:
來源:轉載
供稿:網友
java 多線程機制(一)

PS:又開始忙叨JAVA了。。前一陣子搞定了HTML+CSS,要開始寫實驗室的界面了,真沒勁。。。博客到時候再更新吧!

先更新JAVA的吧。。。

多線程(一)

主要內容

1.JAVA中的線程

2.用Thread子類創建線程

3.使用Runnable接口

4.了解線程的并發性

進程:進程是程序的一次動態的執行過程,它對應了從代碼加載,執行至執行完畢的一個完成過程,這個過程也是進程

本身從產生發展和消亡的過程.簡單的說就是一個程序,比如說我們打開一個瀏覽器,那么這個瀏覽器就加載到了我們的

操作系統中,從而就變成了一個進程,那么線程是什么,線程就是內嵌在進程中的,一個進程可以有多個線程,就拿瀏覽

器來說吧。。我們在打開瀏覽器的同時,可以變瀏覽著網頁,也可以在瀏覽器中播放音樂。還可以同時下載文件。那么這

就是一個瀏覽器進程所包含的多個線程.

1.JAVA的線程

/* * */public class Demo_1_1 {    public static void main(String[] args) {        speakhello sh=new speakhello();        speaknihao sn=new speaknihao();        sh.start();        sn.start();        for(int i=1;i<=20;i++)            System.out.

上述代碼的執行結果是隨機的。。我隨機截了圖。。

上面的結果是speakhello線程先執行,然后主線程執行了三次,然后speakhello執行,依次類推.這是因為JVM已知有三個線程,

主線程和speakhello以及speaknihao三個線程,CPU在這三個線程中進行切換,切換的速度也是非常的快速的。是我們無法想象

的快。。當三個線程完全都執行完畢后,JVM才不會再分配CPU。。。

2.Thread方法創建線程以及實現Runnable接口創建線程

Thread方法和Runnable都可以創建線程,但是更加常用的是Runnable接口重寫run()方法,而不是繼承Thread類重寫run()

原因是JAVA不支持多繼承,繼承了Thread類以后不能再次擴展其他的類,而Runnable屬于接口類型,一個接口可以有多個類進行

實現.

上面的那個代碼就是繼承了Thread類來覆蓋了run()方法來創建線程。

賣票問題:

public class ticket {    public static void main(String[] args) {                //啟動了三個窗口去賣票        windows s1=new windows();        windows s2=new windows();        windows s3=new windows();        Thread t1=new Thread(s1);        Thread t2=new Thread(s2);        Thread t3=new Thread(s3);        t1.start();t2.start();        t3.start();    }}class windows implements Runnable{    private int num=100;   // private static int num=100;    public void run()    {        while(true)        {            try {                Thread.sleep(1000);//每隔一秒出票            } catch (InterruptedException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }            if(num>0)            {                System.out.println("正在出售第"+num+"張票");                num--;            }            else            {                break;            }        }    }}

上面結果的運行就是每個窗口各自賣各自的票,num沒有實現共享,就好像是一個窗口是賣飛機票的

另一個是賣火車票的,最后一個窗口是賣客車票的,總而言之就是每個窗口都分配了100張票,讓他

們去賣。。。。

一種方法就是把上面的代碼做一下修改。。。如上圖的注釋部分,把num改成靜態的,那么這三個窗口

就會共享這100張票了,還有一種方法就是下面把num封裝成一個對象,然后啟動三個線程實現共享。。

public class ticket1 {    public static void main(String[] args) {    sel s=new sel();    Thread t1=new Thread(s);    Thread t2=new Thread(s);    Thread t3=new Thread(s);    t1.start();t2.start();    t3.start();    }}/*買票*/class sel implements Runnable{    private int num=50;    public void run()    {        while(true)        {                        if(num>0)            {                try                {                    Thread.sleep(1000);                }catch(Exception e)                {                    e.printStackTrace();                }                System.out.println(Thread.currentThread().getName()+" 正在銷售第 "+num+"張票 "+num--);            }            else            {                break;            }        }    }}

上述的代碼就實現了這100張票就被這三個窗口共享了,但是上面的代碼如果把try-catch語句放在循環的while的下面

那么就會線程就會出事了,會出現的問題就是,同一張票被賣了多次,而有的票還沒有被賣就沒了,甚至可能出現賣第

0張票的可能。。

那么這是什么原因呢?這就是線程的并發性所導致的問題。。。。。。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成人激情视频网 | 久久99久久99免费视频 | 久久国产精品久久久久久 | 狠狠久久 | 黄污网站在线观看 | 91九色网| 五月天影院,久久综合, | 精品久久久久久久久久中文字幕 | 免费毛片播放 | 亚洲aⅴ免费在线观看 | 国产亚洲精品久久久久久久软件 | 亚洲国产成人一区二区 | 亚洲成人第一页 | 国产亚洲精品综合一区91 | 成人羞羞在线观看网站 | 久久经典国产视频 | 久久色播 | 草久在线 | 色视频一区二区 | 日韩视频一区二区三区四区 | 91成人在线免费观看 | 国产美女一区二区在线观看 | 久久亚洲视频网 | 国产精品视频六区 | 国产精品一区二区三区在线 | japanesexxxx24videofree| 国产精品福利一区 | 得得啪在线 | 国产999精品久久久久 | 香蕉国产在线视频 | 国产免费一区二区三区最新不卡 | 夜夜b| 嫩草91在线 | 极品xxxx欧美一区二区 | 日本黄色免费观看视频 | 日韩毛片在线看 | 中文字幕在线观看成人 | 国产精品视频自拍 | 国产精品v片在线观看不卡 成人一区二区三区在线 | 国产午夜精品一区二区三区免费 | 成人视屏免费看 |