`

多线程上机题

阅读更多
题目如下:
四个线程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多线程编程

    在进行上机实验时,理解并熟练运用这些基本的多线程编程技术,能够帮助开发者编写出高效、稳定的多线程应用程序。在实际操作中,可能还需要关注线程安全的数据结构、异常处理以及线程局部存储(TLS,Thread Local ...

    华为上机试题 附上代码与题目

    10. **并发与多线程**:随着计算机性能的提升,多线程编程成为必备技能。华为的试题可能包含线程同步、互斥锁、条件变量等并发编程的知识点。 11. **调试技巧**:源代码附带的题目可能需要考生具备一定的调试能力,...

    蚂蚁金服上机试题.docx

    "蚂蚁金服上机试题分析" 通过分析蚂蚁金服的上机试题,...这些试题涵盖了算法、数据结构、多线程、锁、异常设计、文本字符处理、逻辑思维、编程基础、代码风格等多个知识点,考察了应试者的编程能力和问题解决能力。

    Java编程上机试题

    5. **多线程**:理解线程的概念,能创建并管理Thread对象,使用synchronized关键字和wait/notify机制解决并发问题。 6. **网络编程**:掌握Socket编程,实现客户端和服务端的通信。 7. **异常处理**:理解和运用try-...

    winForm的上机试题

    本文将深入探讨WinForms在上机面试中的常见试题,并提供相关的知识点。 **1. WinForms基本控件** 面试中可能会涉及到对WinForms基本控件的理解和使用,例如Button、TextBox、Label、ListBox、ComboBox、...

    北大自考计算机专业各科历年上机试题.rar

    操作系统部分可能涉及进程管理,要求设计多线程程序,或者实现内存管理功能。而在计算机网络部分,考生可能需要编写网络通信程序,理解TCP/IP协议栈的工作原理。 数据库管理的上机试题可能会要求设计数据库模式,...

    上机试题 答案 代码

    4. **系统设计**:文件操作、网络编程、多线程、并发处理等。 5. **编程规范**:良好的代码风格、注释规范、错误处理等,这些都是上机考试中可能考察的实践技能。 6. **问题分析与解决**:如何理解和分析问题,...

    操作系统上机题

    - 进程同步与互斥:例如,临界区问题、信号量机制、管程等,这些都是多线程编程中防止资源竞争的重要概念。 - 内存管理:包括分页、分段、虚拟内存、页面替换算法等,理解这些原理对于优化系统性能至关重要。 - I/...

    二级Java上机试题的PDF

    这份PDF资源包含了历年的二级Java上机考试题目,涵盖了基础语法、面向对象编程、异常处理、集合框架、IO流、多线程、网络编程等多个重要知识点。由于其内容详实且贴近实际考试,因此对于考生来说具有极高的实用价值...

    VB.NET上机试题

    多线程允许并发执行任务,提高程序性能。Thread类用于创建和管理线程,SyncLock关键字用于线程同步,防止数据竞争。 10. **WCF服务** Windows Communication Foundation(WCF)是.NET框架下的服务导向架构,用于...

    java08年上机试题

    9. **线程与并发**:Java的多线程编程是高级主题,考生可能需要理解线程的基本概念,如创建线程、同步机制(synchronized关键字、wait/notify机制)等。 通过分析这份08年的北大Java上机试题,不仅可以了解当时的...

    java初学者的经典上机试题

    8. **多线程**:Java提供了丰富的多线程支持,试题可能会考察Thread类的使用、实现Runnable接口、线程同步(synchronized关键字、wait()、notify()、notifyAll())以及线程池(ExecutorService)的使用。 9. **枚举...

    华科历年考研上机题汇总

    具体到2008年的题目,可能会涵盖当年热门的技术点和研究方向,如那时的多线程编程、数据库操作、网络编程等。考生应结合历年真题进行练习,提升自己的编程速度和准确性,同时培养在有限时间内解决复杂问题的能力。 ...

    柳州工学院大学生Android安卓考试源码(上机题).zip

    5. **异步处理**:AsyncTask、Handler、Thread、Loader等多线程技术。 6. **权限管理**:Android 6.0以后的动态权限申请。 7. **Android Studio工具**:项目构建、调试技巧、Gradle脚本理解。 8. **Android App性能...

    JAVA上机考试题

    总的来说,"JAVA上机考试题"将涵盖Java语言的各个方面,从基础到高级,包括但不限于语法、面向对象编程、异常处理、集合框架、IO/NIO、多线程、API应用和算法实现。通过这些题目,考生可以全面检验自己的Java编程...

    北航复试上机试题08-10年(全)

    2010年的题目可能涉及到更复杂的问题,如图形处理、网络编程或者并发多线程等。考生需要掌握一些高级的C语言特性,以及对相关领域的理解,如图形库的使用、TCP/IP协议栈的基本概念等。 通过分析历年试题,考生可以...

    南京理工大学 计算机专业考研 2021年复试上机试题真题.zip

    南京理工大学计算机专业2021年的考研复试上机试题涵盖了多个关键知识点,这些知识点对于准备计算机专业考研的学生来说至关重要。以下是对这些知识点的详细解析: 1. 数据结构:上机试题通常会涉及到基础的数据结构...

    2011年北航计算机研究生复试上机题及代码

    理解这些概念有助于解决实际问题,例如设计一个高效的多线程程序或者优化内存分配。 四、计算机网络 网络知识也可能被考到,包括OSI七层模型、TCP/IP五层模型、网络协议(如TCP、UDP、HTTP)的工作原理,以及网络...

    华为上机题 java版 源码

    - 并发编程是多线程环境下解决问题的关键,熟悉synchronized、volatile、ThreadLocal等关键字,以及线程池的使用。 5. **IO流与NIO** - 文件操作是常见任务,理解字节流、字符流、缓冲流的区别和用法,以及文件...

    北邮复试三道上机题

    这就要求对C++的STL(Standard Template Library)、多线程、异常处理等有深入理解。 为了准备这些上机题目,考生需要系统地复习C++的基础知识,包括但不限于变量、运算符、流程控制、函数、类和对象等。同时,要...

Global site tag (gtag.js) - Google Analytics