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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

多线程(简单实现)

發布時間:2023/12/4 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多线程(简单实现) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

繼承Thread類

  • 兩條線程交替進行
  • 創建線程方式一:繼承Theard類,重寫run方法,調用start開啟線程
  • 總結:注意,線程開啟不一定立即執行,由CPU調度執行
//兩條線程交替進行//創建線程方式一:繼承Theard類,重寫run方法,調用start開啟線程 //總結:注意,線程開啟不一定立即執行,由CPU調度執行 package com.zeng.demo01; public class TestTheard01 extends Thread{@Overridepublic void run() {//run方法線程體for (int i = 0; i < 20; i++) {System.out.println("hello --"+i);}}public static void main(String[] args) {//main線程,主線程//創建一個線程對象TestTheard01 testTheard01 = new TestTheard01();//調用start方法開啟線程testTheard01.start();for (int i = 0; i < 20; i++) {System.out.println("hello word--"+i);}} }

實現Runnable

  • 創建線程方法2:實現runnable接口,重寫run方法,執行線程需要丟入runnable接口實現類,調用start方法
  • 創建線程對象,通過線程對象來開啟我們的線程代理
Thread thread = new Thread(testThread02); thread.start(); package com.zeng.demo01; //創建線程方法2:實現runnable接口,重寫run方法,執行線程需要丟入runnable接口實現類,調用start方法 public class TestThread02 implements Runnable{@Overridepublic void run() {//run方法線程體for (int i = 0; i < 200; i++) {System.out.println("hello woeld--"+i);}}public static void main(String[] args) {//創建runnable接口的實現類對象TestThread02 testThread02 = new TestThread02();//創建線程對象,通過線程對象來開啟我們的線程代理 // Thread thread = new Thread(testThread02); // thread.start();new Thread(testThread02).start();for (int i = 0; i < 200; i++) {System.out.println("hello--"+i);}} }
  • 多個線程同時操縱同一個對象
  • 買火車票的例子
  • 發現問題:多個線程操作同一個資源的情況下,線程不安全,數據紊亂
package com.zeng.demo01; //多個線程同時操縱同一個對象 //買火車票的例子//發現問題:多個線程操作同一個資源的情況下,線程不安全,數據紊亂 public class TestThread03 implements Runnable{//票數private int ticketNums=10;@Overridepublic void run() {while(true){if(ticketNums<=0){break;}// 模擬延時try {Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"-->拿到了第"+ticketNums--+"票");}}public static void main(String[] args) {TestThread03 ticket = new TestThread03();new Thread(ticket,"小明").start();new Thread(ticket,"老師").start();new Thread(ticket,"黃牛黨").start();} }
  • 模擬龜兔賽跑
  • 模擬兔子休息Thread.Sleep(/*時間:單位毫秒*/);
package com.zeng.demo01; //,模擬龜兔賽跑 public class Race implements Runnable{//勝利者private static String winner;@Overridepublic void run() {for (int i = 0; i <= 100; i++) {//模擬兔子休息if(Thread.currentThread().getName().equals("兔子")&&i%10==0){try {Thread.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}}//判斷比賽是否結束boolean flag=gameOver(i);//如果比賽結束了,就停止程序if(flag){break;}System.out.println(Thread.currentThread().getName()+"-->跑了"+i+"步");}}//判斷是否完成比賽private boolean gameOver(int steps){//判斷是否有勝利者if(winner!=null){return true;}if(steps>=100){winner=Thread.currentThread().getName();System.out.println("winner is"+winner);return true;}return false;}public static void main(String[] args) {Race race = new Race();new Thread(race,"兔子").start();new Thread(race,"烏龜").start();} }

總結

以上是生活随笔為你收集整理的多线程(简单实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

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