上个星期我到诚迈科技参加面试.面试完毕后面试官让我把笔试卷上的一道多线程题在计算机上编程实现.题目如下:
四个线程a,b,c,d. 线程a,b对变量i加一. 线程c,d对变量i减去一.四个线程顺序执行, 每个线程每次只执行一次.i的初始值为0, 打印结果0 1 2 1 0 1 2 1 0 1 2...
这道题还是有一定的难度的. 因为要求顺序执行. 不能简单用同步.
经考虑,我决定用一个队列来对四个线程顺序调度.代码如下:
package org.jenfer.struts2demo.web.struts2.action;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
/**
* 四个线程a,b,c,d. 线程a,b对变量i加一.
* 线程c,d对变量i减去一.四个线程顺序执行,
* 每个线程每次只执行一次.i的初始值为0,
* 打印结果0 1 2 1 0 1 2 1 0 1 2...
*
* @author 武汉科技大学08级研究生周剑华
*
*/
public class MultiThreadTest {
//variable i
private int i=0;
//queue to control thread invoke
private BlockingQueue<Integer> queue=new LinkedBlockingQueue<Integer>();
public MultiThreadTest() {
queue.offer(1);
queue.offer(2);
queue.offer(3);
queue.offer(4);
}
public synchronized void inc(int con) throws InterruptedException{
while(true){
int c=queue.peek();
if(c==con){
break;
}else{
notifyAll();
wait();
}
}
queue.offer(queue.take());
i++;
System.out.println(Thread.currentThread().getName()+",i="+i);
}
public synchronized void dec(int con) throws InterruptedException{
while(true){
int c=queue.peek();
if(c==con){
break;
}else{
notifyAll();
wait();
}
}
queue.offer(queue.take());
i--;
System.out.println(Thread.currentThread().getName()+",i="+i);
}
private class IncThread implements Runnable{
private int condition;
public IncThread(int condition) {
this.condition=condition;
}
public void run() {
while(true){
try {
inc(condition);
} catch (InterruptedException e) {
System.err.println(Thread.currentThread().getName()+" exit now");
break;
}
}
}
}
private class DecThread implements Runnable{
private int condition;
public DecThread(int condition) {
this.condition=condition;
}
public void run() {
while(true){
try {
dec(condition);
} catch (InterruptedException e) {
System.err.println(Thread.currentThread().getName()+" exit now");
break;
}
}
}
}
public static void main(String[] args) {
MultiThreadTest test=new MultiThreadTest();
ExecutorService exec=Executors.newFixedThreadPool(4);
exec.submit(test.new IncThread(1));
exec.submit(test.new IncThread(2));
exec.submit(test.new DecThread(3));
exec.submit(test.new DecThread(4));
exec.shutdown();
}
}
分享到:
相关推荐
4. **多线程**:Java提供了丰富的多线程支持,面试中可能会涉及线程的创建、同步机制(如synchronized关键字、Lock接口、信号量等),以及并发工具类如ExecutorService、CountDownLatch、CyclicBarrier等。...
最后,`java上机题.doc`可能涉及实际编程题,可能涵盖以下内容: 1. **程序编写**:根据题目要求,编写符合功能的Java程序,可能涉及到文件操作、网络编程、数据库连接等。 2. **算法实现**:查找、排序算法,如...
总的来说,"JAVA上机考试题"将涵盖Java语言的各个方面,从基础到高级,包括但不限于语法、面向对象编程、异常处理、集合框架、IO/NIO、多线程、API应用和算法实现。通过这些题目,考生可以全面检验自己的Java编程...
Java基础、Java集合、多线程、JDBC、HTTP、JSP、Servlet、Struts面试题汇总(附答案).docx java工程师面试题大全-100%公司笔试题你都能碰到几个.docx Java开发工程师上机笔试题.docx Java开发求职面试题.docx Java...
Java基础、Java集合、多线程、JDBC、HTTP、JSP、Servlet、Struts面试题汇总(附答案).docx java工程师面试题大全-100%公司笔试题你都能碰到几个.docx Java开发工程师上机笔试题.docx Java开发求职面试题.docx Java...
"华为笔试上机题答案苏州和南京地区"这个标题表明这是一份针对华为公司在苏州和南京两地招聘笔试中上机题目的解答集。华为是全球知名的电信设备和消费电子制造商,其笔试题目通常涵盖计算机科学、信息技术、软件开发...
综合以上试题,我们可以看出,蚂蚁金服的上机试题全面考察了应聘者的多个能力维度,包括算法、数据结构、多线程、锁、异常设计、文本字符处理、逻辑思维、编程基础、代码风格以及网络地址知识。通过这些试题,蚂蚁金...
Java南开上机题是针对Java编程语言设计的一系列实践性考试题目,旨在检验学习者对Java语言的理解和应用能力。这些题目通常涵盖基础语法、数据结构、算法、面向对象编程等多个方面,对于提升Java编程技能和准备相关...
本合集涵盖了中国各大公司针对Java开发者进行面试和笔试时的常见问题及上机实践题目,旨在帮助求职者全面了解并准备Java相关的技术面试。以下将详细解析这些文档可能涉及的Java知识点: 1. **基础语法**:Java的...
绝对超值的java全类型的面试题,包含JAVA应用的各个方面,包含各个知名公司的最新的java类面试题,只要你全部背熟,就可以去应聘任何公司的任何java类职务,请各公司自动回避。 对付java “应试”面试的最好武器,希望...
3. 多线程、多进程:多线程是指在一个进程中执行多个线程,从而提高执行效率。多进程是指在一个进程中执行多个进程,从而提高执行效率。 4. join() 和 split() 函数:Python 的 `join` 函数可以将多个字符串连接成...
【描述】"新希望六和 面试题 信息部规划与研发上机试题-高级JAVA开发工程师"指出这是一套具体的上机测试题目,这意味着除了理论知识,面试者还需要具备实际编码能力。上机试题可能包括编写代码片段、调试现有代码、...
7. **多线程**:Java的并发编程是面试中的常见考点,你需要熟悉Thread类、Runnable接口、synchronized关键字、volatile关键字,以及ExecutorService和Future接口等。 8. **设计模式**:单例、工厂、观察者、装饰器...
对于Java开发者而言,面试中常见的问题可能包括:Java基础语法、集合框架、多线程、异常处理、IO流、反射机制、设计模式、JVM内存模型、垃圾回收机制等。 接下来,我们聚焦到“JAVA”这个标签。Java作为广泛使用的...
练习题的类型多样,覆盖了Java编程的多个重要方面,如基础语法、面向对象编程、数据结构、算法、异常处理、多线程、集合框架、IO流、网络编程等。这些内容不仅是Java学习的核心,也是企业对求职者技术能力的基本要求...
7. **多线程编程**:Java提供了丰富的线程API,包括Thread类、Runnable接口、同步机制(synchronized关键字、wait()、notify()等)和并发工具类(如ExecutorService、Semaphore等)。考生需要了解多线程的基本概念和...
7. **网络编程**:TCP/IP协议、套接字编程、多线程/多进程通信。 8. **编程语言基础**:C/C++/Java/Python等语言的基本语法、异常处理、内存管理等。 二、上机笔试题与解答 “华为2016校园招聘上机笔试题及答案.zip...
1. **Java编程**:熟悉Java语法,理解面向对象编程概念,如封装、继承、多态,以及异常处理、线程同步等高级特性。 2. **数据库管理**:学习SQL语言,包括查询、插入、更新和删除数据,理解数据库设计原则,如ER模型...
1. **编程实战**:根据给定的问题描述编写程序,可能涉及到上述编程语言的高级特性,如面向对象编程、异常处理、多线程编程等。 2. **调试与优化**:检查和修复代码错误,理解运行时错误,并进行性能优化。 3. **...
"y2"代表学习阶段,"java"是编程语言,"结业"表示这是学业结束时的考核,"机试题"则说明是需要在计算机上进行的实际操作题目,可能涵盖类设计、异常处理、数据结构、IO流、多线程、集合框架、数据库操作等Java核心...