多线程面试题
2023-09-11 14:18:37 时间
子线程循环10次,接着回到主线程循环100次,又接着回到子线程循环10次,再接着回到主线程又循环100次,如次循环50次,请写出程序
/** * * @描述: 子线程循环10次,接着回到主线程循环100次,又接着回到子线程循环10次,再接着回到主线程又循环100次,如次循环50次,请写出程序 .. * @作者: Wnj . * @创建时间: 2017年5月15日 . * @版本: 1.0 . */ public class TraditionalThreadCommunication { /** * @param args */ public static void main(String[] args) { final Business business = new Business(); new Thread(new Runnable() { @Override public void run() { //循环50次 for (int i = 1; i <= 50; i++) { //子线程循环10次 business.sub(i); } } }).start(); //循环50次 for (int i = 1; i <= 50; i++) { //主线程循环100次 business.main(i); } } } /** * * 在Java.lang.Thread类中,提供了sleep(), 而java.lang.Object类中提供了wait(), notify()和notifyAll()方法来操作线程 sleep()可以将一个线程睡眠,参数可以指定一个时间。 wait()可以将一个线程挂起,直到超时或者该线程被唤醒。 wait有两种形式wait()和wait(milliseconds). sleep和wait的区别有: 1,这两个方法来自不同的类分别是Thread和Object 2,最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。 3,wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用 synchronized(x){ x.notify() //或者wait() } 4,sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常(使用wait,需要捕捉异常) */ class Business { private volatile boolean bShouldSub = true; /** * 子线程循环10次 * synchronized互斥 * @param i */ public synchronized void sub(int i) { //检查 while (!bShouldSub) { try { this.wait();//wait方法释放了锁,使得其他线程可以使用同步控制块或者方法 } catch (InterruptedException e) { e.printStackTrace(); } } for (int j = 1; j <= 10; j++) { System.out.println("[子线程]sub thread sequence of " + j + ",loop of " + i); } bShouldSub = false; this.notify(); } /** * 主线程循环100次 * synchronized互斥 * @param i */ public synchronized void main(int i) { while (bShouldSub) { try { this.wait();//wait方法释放了锁,使得其他线程可以使用同步控制块或者方法 } catch (InterruptedException e) { e.printStackTrace(); } } for (int j = 1; j <= 100; j++) { System.out.println("[主线程]main thread sequence of " + j + ",loop of " + i); } bShouldSub = true; this.notify(); }
相关文章
- X明X源面试题《二》
- SpringMVC面试题常问的29道(附答案)
- (剑指Offer)面试题46:求1+2+3+....+n
- (剑指Offer)面试题18:树的子结构
- LeetCode-面试题 17.19. 消失的两个数字【求和】
- 【Java面试题】汽水瓶问题
- react面试题-setState可能是异步更新(是同步还是异步)?
- 2022最新 Android 中高级面试题汇总(含答案解析)
- Android面试题2022最新整理(共计4176页PDF)包含腾讯、字节、百度、小米、阿里等大厂面试真题
- 软件测试工程师经典面试题
- 常见Java面试题 Java容器都有哪些?
- 面试官最常问的面试题及答案,每1题都很经典
- 分享一波平安集团旗下某子公司面试题。
- 【每日一刷】浦发银行软测专家问的这20个经典面试题,你知道多少个?
- Java多线程面试题与答案