一道线程同步面试题

一道线程同步面试题

package com.wsy.model;

/**
 * 完毕主线程循环10次,接着子线程循环5次,如此往复10次
 * 
 * @author wsy
 * 
 */
public class TraditionalThreadCommunication {
	static Bussiness bussiness = new Bussiness();

	public static void main(String[] args) {
		
		new Thread(new Runnable() {
			@Override
			public void run() {
				for (int i = 1; i <= 10; i++) {
					bussiness.sub(i);
				}
			}
		}).start();
		
		for (int i = 1; i <= 10; i++) {
			bussiness.main(i);
		}
		
	}
}

class Bussiness {
	static boolean isThreadSub = true;

	public synchronized void sub(int i) {
		
		while (!isThreadSub) {
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}

		for (int j = 1; j <= 10; j++) {
			System.out.println("sub: " + j + " of loop " + i);
		}

		isThreadSub = false;
		this.notify();
		
	}

	public synchronized void main(int i) {
		
		while (isThreadSub) {
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}

		for (int j = 1; j <= 5; j++) {
			System.out.println("main: " + j + " of loop " + i);
		}

		isThreadSub = true;
		this.notify();
		
	}
}

输出结果:

sub: 1 of loop 1
sub: 2 of loop 1
sub: 3 of loop 1
sub: 4 of loop 1
sub: 5 of loop 1
sub: 6 of loop 1
sub: 7 of loop 1
sub: 8 of loop 1
sub: 9 of loop 1
sub: 10 of loop 1
main: 1 of loop 1
main: 2 of loop 1
main: 3 of loop 1
main: 4 of loop 1
main: 5 of loop 1
sub: 1 of loop 2
sub: 2 of loop 2
sub: 3 of loop 2
sub: 4 of loop 2
sub: 5 of loop 2
sub: 6 of loop 2
sub: 7 of loop 2
sub: 8 of loop 2
sub: 9 of loop 2
sub: 10 of loop 2
main: 1 of loop 2
main: 2 of loop 2
main: 3 of loop 2
main: 4 of loop 2
main: 5 of loop 2
sub: 1 of loop 3
sub: 2 of loop 3
sub: 3 of loop 3
sub: 4 of loop 3
sub: 5 of loop 3
sub: 6 of loop 3
sub: 7 of loop 3
sub: 8 of loop 3
sub: 9 of loop 3
sub: 10 of loop 3
main: 1 of loop 3
main: 2 of loop 3
main: 3 of loop 3
main: 4 of loop 3
main: 5 of loop 3
sub: 1 of loop 4
sub: 2 of loop 4
sub: 3 of loop 4
sub: 4 of loop 4
sub: 5 of loop 4
sub: 6 of loop 4
sub: 7 of loop 4
sub: 8 of loop 4
sub: 9 of loop 4
sub: 10 of loop 4
main: 1 of loop 4
main: 2 of loop 4
main: 3 of loop 4
main: 4 of loop 4
main: 5 of loop 4
sub: 1 of loop 5
sub: 2 of loop 5
sub: 3 of loop 5
sub: 4 of loop 5
sub: 5 of loop 5
sub: 6 of loop 5
sub: 7 of loop 5
sub: 8 of loop 5
sub: 9 of loop 5
sub: 10 of loop 5
main: 1 of loop 5
main: 2 of loop 5
main: 3 of loop 5
main: 4 of loop 5
main: 5 of loop 5
sub: 1 of loop 6
sub: 2 of loop 6
sub: 3 of loop 6
sub: 4 of loop 6
sub: 5 of loop 6
sub: 6 of loop 6
sub: 7 of loop 6
sub: 8 of loop 6
sub: 9 of loop 6
sub: 10 of loop 6
main: 1 of loop 6
main: 2 of loop 6
main: 3 of loop 6
main: 4 of loop 6
main: 5 of loop 6
sub: 1 of loop 7
sub: 2 of loop 7
sub: 3 of loop 7
sub: 4 of loop 7
sub: 5 of loop 7
sub: 6 of loop 7
sub: 7 of loop 7
sub: 8 of loop 7
sub: 9 of loop 7
sub: 10 of loop 7
main: 1 of loop 7
main: 2 of loop 7
main: 3 of loop 7
main: 4 of loop 7
main: 5 of loop 7
sub: 1 of loop 8
sub: 2 of loop 8
sub: 3 of loop 8
sub: 4 of loop 8
sub: 5 of loop 8
sub: 6 of loop 8
sub: 7 of loop 8
sub: 8 of loop 8
sub: 9 of loop 8
sub: 10 of loop 8
main: 1 of loop 8
main: 2 of loop 8
main: 3 of loop 8
main: 4 of loop 8
main: 5 of loop 8
sub: 1 of loop 9
sub: 2 of loop 9
sub: 3 of loop 9
sub: 4 of loop 9
sub: 5 of loop 9
sub: 6 of loop 9
sub: 7 of loop 9
sub: 8 of loop 9
sub: 9 of loop 9
sub: 10 of loop 9
main: 1 of loop 9
main: 2 of loop 9
main: 3 of loop 9
main: 4 of loop 9
main: 5 of loop 9
sub: 1 of loop 10
sub: 2 of loop 10
sub: 3 of loop 10
sub: 4 of loop 10
sub: 5 of loop 10
sub: 6 of loop 10
sub: 7 of loop 10
sub: 8 of loop 10
sub: 9 of loop 10
sub: 10 of loop 10
main: 1 of loop 10
main: 2 of loop 10
main: 3 of loop 10
main: 4 of loop 10
main: 5 of loop 10

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119273.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • git之本地仓库关联远程仓库

    git之本地仓库关联远程仓库

    2021年10月17日
    44
  • 深度强化学习之模仿学习(Imitation Learning)

    深度强化学习之模仿学习(Imitation Learning)  上一部分研究的是奖励稀疏的情况,本节的问题在于如果连奖励都没有应该怎么办,没有奖励的原因是,一方面在某些任务中很难定量的评价动作的好坏,如自动驾驶,撞死人和撞死动物的奖励肯定不同,但分别为多少却并不清楚,另一方面,手动设置的奖励可能导致不可控的行为。要解决此类问题,可以将人类专家的范例作为强化学习代理的参考去学习,因此模仿学习又叫演示学习(Learningbydemonstration)…

    2022年9月2日
    6
  • 2016年终总结–前端生涯从0到1的过程

    2016年终总结–前端生涯从0到1的过程

    2022年2月23日
    44
  • tryhackme圣诞挑战2021-Advent of Cyber 3-day1-IDOR漏洞,不安全的访问控制漏洞

    tryhackme圣诞挑战2021-Advent of Cyber 3-day1-IDOR漏洞,不安全的访问控制漏洞文章目录第一天IDOR漏洞是什么?通常出现的地方查询get请求post的表单的值cookies挑战初探挑战的问题第一天货物系统出现了问题,让我们想办法进行修复!IDOR漏洞是什么?InsecureDirectObjectReference,不安全的直接对象引用,是一种权限控制类漏洞,类似于越权漏洞吧,就是用户访问到了自己不应该访问的信息,比如我只能查看我自己的资料,但我可以通过修改一些参数访问其他人的资料。通常出现的地方查询get请求post的表单的值这里用户的id被隐藏了,如果修

    2022年6月11日
    36
  • 常用C#代码「建议收藏」

    常用C#代码「建议收藏」常用C#代码字符串处理1.字符串截取//字符串截取//从此实例检索子字符串。子字符串从指定的字符位置开始且具有指定的长度。string.Substring(intindex,intlength);//从此实例检索子字符串。子字符串在指定的字符位置开始并一直到该字符串的末尾。string.Substring(intindex);2.字符串分割//字符串分割//separator-char类型的数组分隔符,例:newchar[]{‘,’,‘|’}string.Split

    2025年10月15日
    3
  • voliate 关键字「建议收藏」

    voliate 关键字「建议收藏」voliatecpu术语定义术语英文单词术语描述内存屏障cachebarriers处理器的指令,用于实现对内存操作的顺序限制原子操作atomicopers不可中断的一个操作缓存行填充cachelinefill当处理器识别到内存的读操作是可缓存的,处理器读取整个缓存行到适合的缓存(L1,L2,L3)缓存命中cachehit当进行高速缓存行填充的内存位置不变时,处理器从缓存中读取,而非内存写命中writehitpp写

    2022年6月3日
    63

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号