`

多线程上机题

阅读更多
题目如下:
四个线程1,2,3,4. 线程1,2对变量i加一. 线程3,4对变量i减去一.四个线程顺序执行, 每个线程每次只执行一次.i的初始值为0, 打印结果0 1 2 1 0 1 2 1 0 1 2...

package test01;

import java.util.concurrent.LinkedBlockingQueue;

public class ThreadUtil {

	private LinkedBlockingQueue<Integer> lbq = new LinkedBlockingQueue<Integer>(
			4);

	private int count = 0;

	@SuppressWarnings("boxing")
	public ThreadUtil() {
		lbq.offer(1);
		lbq.offer(2);
		lbq.offer(3);
		lbq.offer(4);
	}

	@SuppressWarnings("boxing")
	public synchronized void inc(int content) {
		while (true) {
			int temp = lbq.peek();
			if (temp == content) {
				break;
			}
			notifyAll();
			try {
				wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}

		}

		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.print(count + " ");
		count++;
		try {
			lbq.offer(lbq.take());
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		//print();
	}

	@SuppressWarnings("boxing")
	public synchronized void dec(int content){
		while (true) {
			int temp = lbq.peek();
			if (temp == content) {
				break;
			}
			notifyAll();
			try {
				wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		System.out.print(count + " ");
		count--;
		try {
			lbq.offer(lbq.take());
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		//print();
	}
	
	private void print()
	{
		System.out.println("=====>"+lbq.toString());
	}

}

package test01;

public class IncThread implements Runnable {

	private ThreadUtil tu;

	private int content;

	public IncThread(ThreadUtil tu, int content) {
		this.tu = tu;
		this.content = content;
	}

	@Override
	public void run() {
		while (true) {
			tu.inc(content);
		}
	}

}

package test01;

public class DecThread implements Runnable{

	private ThreadUtil tu;
	
	private int content;

	public DecThread(ThreadUtil tu,int content) {
		this.tu = tu;
		this.content = content;
	}
	
	@Override
	public void run() {
		while (true) {
			tu.dec(content);
		}
	}

}

package test01;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Test01 {

	public static void main(String[] args) {
		ThreadUtil tu = new ThreadUtil();

		ExecutorService exec = Executors.newFixedThreadPool(4);

		exec.submit(new IncThread(tu, 1));
		exec.submit(new IncThread(tu, 2));
		exec.submit(new DecThread(tu, 3));
		exec.submit(new DecThread(tu, 4));

		exec.shutdown();

	}

}

运行结果如下:
0 1 2 1 0 1 2 1 0 1 2 1 0 1 2 1 

参考自:http://ethanzhou.blog.51cto.com/6147883/1045683
分享到:
评论

相关推荐

    操作系统上机-Linux多线程编程

    操作系统上机-Linux多线程编程

    C#实现炮打飞机

    用C#的多线程技术实现的炮打飞机上机实验题。希望对大家有参考价值。

    史长最全的java涉及各方面的笔试,测试,上机题

    绝对超值的java全类型的面试题,包含JAVA应用的各个方面,包含各个知名公司的最新的java类面试题,只要你全部背熟,就可以去应聘任何公司的任何java类职务,请各公司自动回避。 对付java “应试”面试的最好武器,希望...

    阿-里的面试题 经典

    阿里巴巴的面试经典题,其中包含了大量的阿里巴巴HR的面试题,个人亲身的面试体会,面试经典,面试宝典,比如Java的面试题,中的面向对象,重写复写,各种集合的考察线程,单线程多线程的考察线程安全,JVM还有GC...

    Java程序设计A卷.doc

    全面的Java基础题目,涵盖多线程、网络编程、IO流操作等技术知识,适合Java初学者,答案联系我免费赠送

    leetcode分类-GoldenProblems:Onion压仓底的算法题解,包含Leetcode,研究生复试上机题,企业笔试题

    Onion压仓底的算法题解,包含Leetcode,研究生复试上机题,企业笔试题,已有题目150+ algorithm 算法及模版 contest 比赛算法题,包括研究生复试、企业笔试题 leetcode 经典 array 数组类型题目 backtrace 回溯题目 ...

    JAVA笔试面试资料JDBC HTTP、JSP、Servlet、Struts面试题汇总资料.zip

    Java基础、Java集合、多线程、JDBC、HTTP、JSP、Servlet、Struts面试题汇总(附答案).docx java工程师面试题大全-100%公司笔试题你都能碰到几个.docx Java开发工程师上机笔试题.docx Java开发求职面试题.docx Java...

    Java swing画随机圆

    Java画随机圆:大小随机、颜色随机、位置随机。 西安电子科技大学Java上机题

    C#网络应用高级编程

    主要内容包括c#多线程处理、tcp、udp、smtp和pop3的高级应用以及p2p应用编程,网络数据加密与解密的方法,三维设计与多媒体编程方法,同时还有与本书配套的上机实验指导、电子教案、所有例题与习题的源程序和全部...

    《C#程序设计教程第2版》配套源码

    此后介绍 Windows应用程序开发、GDI+编程、文件操作、数据库应用、多线程技术。习题主要突出基本编程和基本概念,实验主要锻炼编程和应用,读者先跟着做,然后自己练习。一般来说,通过本教程学习,习题练习,特别是...

    c#网络编程

    其中第1~5章介绍了C#多线程处理、TCP、UDP、SMTP和POP3协议的高级应用以及P2P应用编程,第6章介绍了网络数据加密与解密的方法,第7章介绍了三维设计与多媒体编程方法,第8章为与本书配套的上机实验指导。...

    C#网络高级编程电子书

    主要内容包括c#多线程处理、tcp、udp、smtp和pop3的高级应用以及p2p应用编程,网络数据加密与解密的方法,三维设计与多媒体编程方法,同时还有与本书配套的上机实验指导、电子教案、所有例题与习题的源程序和全部...

    面向对象技术与UML课件及源代码-by 南邮-陈杨

    第12章多线程开发 第13章反射技术 第14章实验指导3 下篇UML 第15章UML入门 第16章用例图 第17章类图和对象图 第18章实验指导4 第19章顺序图、协作图、状态图和活动图 第20章包图、构件图和部署图 第21...

    C#学习文档实例讲解

    前 言 6 第1章 进程、线程与网络协议 7 1.1 进程和线程 7 1.1.1 Process类 7 ...第8章 上机实验指导 194 8.1 实验一 简单网络聊天系统 194 8.2 实验二 网络呼叫应答提醒系统 195 8.3 实验三 文件数据加密与解密 199

    读者写者问题课程设计

    (3)多线程编程方法参见附件。) 3. 调试报告: 1) 调试记录 2) 自我评析和总结 上机时间安排: 19周一 ~ 五 下午14:00 - 18:00 (6月27日开始) 指导教师签名: 年 月 日 系主任(或责任教师)签名: 年 月 日...

    java基础案例与开发详解案例源码全

    12.1.5 为什么需要多线程309 12.1.6 线程分类309 12.2 线程的生命周期309 12.2.1 线程的状态及转换310 12.2.2 线程睡眠311 12.2.3 线程让步313 12.2.4 线程的加入313 12.3 线程的调度和优先级314 12.4 线程的同步315...

    C#网络核心编程(Word版电子书+PPT+源代码+习题解答)

    学习.NET Socket编程的好书,资源包含Word版电子书(201页完整版),源代码,PPT,...第8章 上机实验指导 194 8.1 实验一 简单网络聊天系统 194 8.2 实验二 网络呼叫应答提醒系统 195 8.3 实验三 文件数据加密与解密 199

Global site tag (gtag.js) - Google Analytics