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

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

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

线程面试题

發(fā)布時(shí)間:2023/12/2 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线程面试题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.在使用線程時(shí),為什么不直接調(diào)用run()方法而是調(diào)用了start():

  直接調(diào)用run()方法,不存在線程的啟動(dòng),屬于調(diào)用實(shí)例方法,只有一條執(zhí)行路徑,不存在多線程并行交替執(zhí)行了。調(diào)用start()方法屬于啟動(dòng)線程,將自動(dòng)調(diào)用run()方法

2.子線程循環(huán) 10次,接著主線程循環(huán) 100次,接著又回到子線程循環(huán) 10次,接著再回到主線程又循環(huán) 100次,如此循環(huán)50次

public class ThreadTest{ public static void main(String[] args) { final MyThread threads=new MyThread(); new Thread( new Runnable(){ public void run(){ for(int i=1;i<=50;i++){ threads.subThread(i); } } } ).start(); new Thread(new Runnable(){ public void run(){ for(int i=1;i<=50;i++){ threads.mainThread(i); } } }).start(); } } class MyThread{ boolean bShouldSub=true;//標(biāo)志子線程方法是否被調(diào)用 public synchronized void subThread(int i){ if(!bShouldSub){//若子線程沒(méi)被調(diào)用,即主線程正在運(yùn)行,所以等待 try { this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } for(int j=1;j<=10;j++){ System.out.println("sub thread :"+i+",loop : "+j); } bShouldSub=false;//子線程運(yùn)行完畢 this.notify();//喚醒其他線程,即主線程 } public synchronized void mainThread(int i){ if(bShouldSub){//若子線程正在被調(diào)用,所以等待 try { this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } for(int j=1;j<=100;j++){ System.out.println("main thread :"+i+",loop : "+j); } bShouldSub=true;//主線程調(diào)用完畢 this.notify();//喚醒子線程 } }

3.編寫(xiě)一個(gè)程序,開(kāi)啟3個(gè)線程,這3個(gè)線程的ID分別為A、B、C,每個(gè)線程將自己的ID在屏幕上打印10遍,要求輸出結(jié)果必須按ABC的順序顯示

public class TestThread { /** * @author lucky */ public static void main(String[] args) { new Thread(new TestRun("A")).start(); new Thread(new TestRun("B")).start(); new Thread(new TestRun("C")).start(); } } class TestRun implements Runnable { private String name; private static String flag = "A"; private int count = 10; TestRun(String name) { this.name = name; } @Override public void run() { while (count > 0) { synchronized (flag) { if (flag.equals(name)) { System.out.print(name); count--; if (name.equals("A")) flag = "B"; if (name.equals("B")) flag = "C"; if (name.equals("C")) flag = "A"; } } } } }

4.wait()方法和sleep()方法的區(qū)別:

  1.wait()方法用于將當(dāng)前線程處于等待狀態(tài),它是Object類(lèi)的;sleep()是將當(dāng)前線程休眠,它是Thread
  2.wait()將鎖釋放,sleep()方法不會(huì)釋放鎖

5.生產(chǎn)者和消費(fèi)者

  

  

轉(zhuǎn)載于:https://www.cnblogs.com/xiao-ran/p/10735496.html

總結(jié)

以上是生活随笔為你收集整理的线程面试题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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