`
悲剧了
  • 浏览: 145330 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

论坛上java多线程的一道题

阅读更多
题目为:
有一个南北向的桥,只能容纳一个人,现桥的两边分别有10人和12人,编制一个多线程序让这些人到达对岸,每个人用一个线程表示,桥为共享资源。在过桥的过程中显示谁在过桥及其走向

论坛链接:http://www.iteye.com/topic/1041415

解法如下:
桥是共享资源,采用单例


public enum Direction {
	
	North2Sourth{
		String getInfo(){
			return "北向南走";
		}
	},
	Sourth2North{
		String getInfo(){
			return "南向北走";
		}
	};
	
	abstract String getInfo();



}



public class Person implements Runnable {
	/**
	 * 方向
	 */
	private Direction direction;
	/**
	 * 姓名*标志
	 */
	private String name;
	/**
	 * 持有一个桥的引用
	 */
	private static final Bridge BRIDGE=Bridge.getIntance();
	public Direction getDirection() {
		return direction;
	}
	public void setDirection(Direction direction) {
		this.direction = direction;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public void run() {
		BRIDGE.display(this);
	}
	

}






public class Bridge {
	
	private static class BridgeContainer{
		private static Bridge intance=new Bridge();
	}

	private Bridge(){
		
	}
	public synchronized void display(Person p) {
		DateFormat df = new SimpleDateFormat("HH:mm:ss");

		String date = df.format(System.currentTimeMillis());

		System.out.println("时间:" + date+"过桥人为" +p.getName()+"方向是:"+ p.getDirection().getInfo() );
		try {
			/**
			 * 模拟过桥过程
			 */
			Thread.sleep(2000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static Bridge  getIntance(){
		return BridgeContainer.intance;
	}
	

}



public class Client {
	public static void main(String[] args) {
		/**
		 * 模拟在南边的12个
		 */
		Person[] p1s=new Person[12];
		for(int i=0;i<12;i++){
			p1s[i]=new Person();
			p1s[i].setName("n"+i+"号");
			p1s[i].setDirection(Direction.North2Sourth);
			new Thread(p1s[i]).start();
		}
		/**
		 * 模拟在北边的10个
		 */
		Person[] p2s=new Person[10];
		for(int i=0;i<10;i++){
			p2s[i]=new Person();
			p2s[i].setName("s"+i+"号");
			p2s[i].setDirection(Direction.Sourth2North);
			new Thread(p2s[i]).start();
		}
	}
	

}

运行结果如下:
时间:13:09:21过桥人为n0号方向是:北向南走
时间:13:09:23过桥人为s9号方向是:南向北走
时间:13:09:25过桥人为s8号方向是:南向北走
时间:13:09:27过桥人为s7号方向是:南向北走
时间:13:09:29过桥人为s5号方向是:南向北走
时间:13:09:31过桥人为s6号方向是:南向北走
时间:13:09:33过桥人为s4号方向是:南向北走
时间:13:09:35过桥人为n10号方向是:北向南走
时间:13:09:37过桥人为s0号方向是:南向北走
时间:13:09:39过桥人为n11号方向是:北向南走
时间:13:09:41过桥人为s2号方向是:南向北走
时间:13:09:43过桥人为s3号方向是:南向北走
时间:13:09:45过桥人为n8号方向是:北向南走
时间:13:09:47过桥人为n6号方向是:北向南走
时间:13:09:49过桥人为n9号方向是:北向南走
时间:13:09:51过桥人为n2号方向是:北向南走
时间:13:09:53过桥人为s1号方向是:南向北走
时间:13:09:55过桥人为n4号方向是:北向南走
时间:13:09:57过桥人为n7号方向是:北向南走
时间:13:09:59过桥人为n5号方向是:北向南走
时间:13:10:01过桥人为n1号方向是:北向南走
时间:13:10:03过桥人为n3号方向是:北向南走
1
0
分享到:
评论

相关推荐

    用java写的一个多线程的c/s客户端的考试系统

    Java编写的多线程C/S客户端考试系统是一个典型的分布式应用程序,它将客户端(Client)与服务器端(Server)分开,实现高效、稳定的考试服务。在这个系统中,Java语言以其跨平台性和丰富的类库成为了开发首选。下面...

    java的一道考试题

    6. **多线程**:Thread类和Runnable接口的使用,同步机制如synchronized关键字、wait/notify方法等,都是多线程编程的重要知识点。 7. **泛型**:泛型用于创建类型安全的集合,限制元素类型,提升代码可读性和复用...

    java练习题,适合一些java初学者

    10. 线程与并发:Java提供了多线程支持,可以同时执行多个任务。理解线程的生命周期、同步机制(synchronized, volatile, Lock)以及并发工具类(ExecutorService, ThreadPoolExecutor)是编写高性能Java应用的基础...

    最新JAVA编程题全集(50题及答案

    题目涵盖了Java编程的各个方面,从基础语法、面向对象编程到集合框架,从多线程编程、异常处理到IO流和网络编程,无一不展示出Java语言的丰富性和强大功能。 在基础语法层面,初学者能够通过对变量、数据类型、...

    java基础编程题java基础编程题.doc

    Java是一种高级、基于对象的编程语言,它具有跨平台、面向对象、分布式、多线程等特点。Java基础编程题是Java编程的基础知识点的总结,涵盖了Java语言的基本语法、数据类型、运算符、控制结构、函数、数组、面向...

    Java题库(内含15套题)

    6. **多线程**:Java内置了对多线程的支持,允许程序同时执行多个任务。Thread类和Runnable接口是创建和管理线程的主要手段,同步机制(如synchronized关键字、Lock接口)确保了线程安全。 7. **反射**:Java反射...

    答复: 一道经典线程面试题的4种解法

    标题中的“答复: 一道经典线程面试题的4种解法”暗示了这是一个关于多线程编程的问题,通常在面试中出现,用于评估候选人的并发处理能力。在这个问题中,可能涉及到同步、线程安全、锁机制等关键概念。 在Java中,...

    Java 面试题 Java 面试题

    下面将详细解析每一道题目涉及的关键概念。 ### 第一部分:基础知识 #### 1. final, finally, finalize的区别 - **final**: 用于声明变量、方法或者类,表示不可变性。例如,声明为final的变量不允许再次赋值;...

    自考 java 模拟题 共八套 并带答案

    这可能是2009年的Java自考模拟试题集,它可能会包括选择题、填空题、简答题以及编程题等多种题型,覆盖了Java的基础语法、面向对象编程、异常处理、集合框架、多线程、IO流、网络编程以及JVM的工作原理等多个方面的...

    Java高级面试题汇总及答案(2022年Java面试题及答案大全)

    5. Java多态性是Java语言中的一种重要概念,包括方法的重载和重写。面试官可能会问到重载和重写的区别、方法的重载和重写的应用场景等。 Java线程编程 6. Java线程编程是Java语言中的一种高级主题,包括线程的创建...

    java自考4747_书上例题+课件+课后习题答案+自考真题

    Java作为当今世界上使用最为广泛的编程语言之一,拥有跨平台、高效、稳定的特性,使其成为许多开发者学习和工作中不可或缺的工具。特别是对于想要通过自学考试(自考)提升自身技能和学历的学员而言,掌握Java语言的...

    阿里软件JAVA笔试题

    阿里软件JAVA笔试题是阿里巴巴公司为招聘软件开发工程师所设计的一份笔试题目,涵盖了JAVA语言、数据结构、算法、设计模式、数据库等多方面的知识点。 本题目共有15道题目,涵盖了以下几个方面: 逻辑推理 1. 甲...

    java程序员认证模拟题

    6. **多线程**:Java支持多线程编程,考生需要理解线程的创建、同步和通信,如synchronized关键字、wait()、notify()和notifyAll()方法,以及Thread类和Runnable接口的区别。 7. **反射**:反射是Java的一个高级...

    Java考试模拟试题及答案(上机2套题及答案)

    《Java程序设计》机考卷A.doc包含了若干道精心设计的Java编程题目,这些题目覆盖了Java语言的基础语法、面向对象编程、异常处理、集合框架、多线程、IO流、网络编程等多个核心领域。考生在解答这些题目时,不仅能...

    Java零基础配套练习题51道完整版

    12. **多线程**:创建线程的两种方式(继承Thread类和实现Runnable接口),理解线程同步(synchronized关键字,wait()、notify()和notifyAll()方法)和线程间通信。 13. **枚举类型**:了解枚举的创建和使用,以及...

    Java二级南开上机100题和答案

    7. **多线程**:了解线程的创建、同步、通信等,包括Thread类、Runnable接口,以及synchronized、wait()、notify()等关键字的应用。 8. **枚举与注解**:枚举用于定义一组固定的常量,注解则是为代码元素添加元数据...

    JAVA程序设计习题集++含参考答案.zip

    6. **多线程**:Java内置了对多线程的支持,习题可能包括线程的创建、同步、通信等。理解线程间的协作与竞争对于开发高效的并发程序至关重要。 7. **网络编程**:Java提供了丰富的网络编程API,如Socket、...

    java测试题(内含java测试题)

    - 多线程:理解线程的概念,如何创建和管理线程,以及同步和互斥的概念。 - 输入输出流:学习FileInputStream、FileOutputStream、BufferedReader、BufferedWriter等类,进行文件读写操作。 - 枚举和注解:了解...

    java面试800题

    volatile:volatile变量表示保证它必须是与主内存保持一致,它实际是""变量的同步"", 也就是说对于volatile变量的操作是原子型的,如用在long 或 double变量前,一般用于多线程编程。 abstract:抽象,必须重载,修饰...

Global site tag (gtag.js) - Google Analytics