`
my_corner
  • 浏览: 84469 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

三个线程循环打印abc十次

阅读更多
朋友问的题,试着写写。也许有其他实现方式,感觉题目应该是考察线程间协作wait和notify所以选择如下方式实现:
/**
 * @author my_corner
 * 2011-12-26
 */
public class ThreadPrint {

	/**
	 * @author my_corner
	 * @param 
	 * @return 
	 * @throws InterruptedException 
	 */
	public static void main(String[] args) throws InterruptedException {
		PrintTask task = new PrintTask();
		
		Thread a = new Thread(task);
		a.setName("a");
		Thread b = new Thread(task);
		b.setName("b");
		Thread c = new Thread(task);
		c.setName("c");
		
		a.start();
		b.start();
		c.start();
		
	}

}

class PrintTask implements Runnable{
	private int times = 0;

	/**
	 * 
	 */
	@Override
	public void run() {
		while(times<30){
			synchronized (this) {
				if(times%3==0){
					if("a".equals(Thread.currentThread().getName())){
						System.out.print("a");
						times++;
						this.notifyAll();
					}else{
						try {
							this.wait();
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
					}
				}
				if(times%3==1){
					if("b".equals(Thread.currentThread().getName())){
						System.out.print("b");
						times++;
						this.notifyAll();
					}else{
						try {
							this.wait();
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
					}
				}
				if(times%3==2){
					if("c".equals(Thread.currentThread().getName())){
						System.out.print("c");
						times++;
						this.notifyAll();
					}else{
						try {
							this.wait();
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
					}
				}
			}
		}
	}
	
}
分享到:
评论

相关推荐

    Java全国自考历年试卷答案.doc

    初始值x=10,因此循环会执行三次,打印三个星号。因此,输出结果是B.***。 3. 内存回收:在Java中,对象引用的变化可能影响内存回收。选项B(u=v)会导致u指向v的对象,可能导致原来的u对象变成无引用状态,从而...

    最新Java面试宝典pdf版

    63、List、Map、Set三个接口,存取元素时,各有什么特点? 45 64、说出ArrayList,Vector, LinkedList的存储性能和特性 46 65、去掉一个Vector集合中重复的元素 46 66、Collection 和 Collections的区别。 47 67、Set...

    搜狗最新秋招Java笔试题.docx

    这段代码看起来是一个循环嵌套,内部循环依赖于外部循环的条件,因此其时间复杂度是O(n^2),选A。 2. 第二题是一个组合问题,涉及到字符串中字符数量的约束。这个问题可以通过动态规划或计数方法解决,答案是B,429...

    Java面试宝典2012版

    63、List、Map、Set三个接口,存取元素时,各有什么特点? 45 64、说出ArrayList,Vector, LinkedList的存储性能和特性 46 65、去掉一个Vector集合中重复的元素 46 66、Collection 和 Collections的区别。 47 67...

    Java面试宝典2012新版

    63、List、Map、Set三个接口,存取元素时,各有什么特点? 45 64、说出ArrayList,Vector, LinkedList的存储性能和特性 46 65、去掉一个Vector集合中重复的元素 46 66、Collection 和 Collections的区别。 47 67、Set...

    Java面试宝典-经典

    63、List、Map、Set三个接口,存取元素时,各有什么特点? 45 64、说出ArrayList,Vector, LinkedList的存储性能和特性 46 65、去掉一个Vector集合中重复的元素 46 66、Collection 和 Collections的区别。 47 67、Set...

    java面试题大全(2012版)

    63、List、Map、Set三个接口,存取元素时,各有什么特点? 45 64、说出ArrayList,Vector, LinkedList的存储性能和特性 46 65、去掉一个Vector集合中重复的元素 46 66、Collection 和 Collections的区别。 47 67、Set...

    java面试宝典2012

    63、List、Map、Set三个接口,存取元素时,各有什么特点? 49 64、说出ArrayList,Vector, LinkedList的存储性能和特性 50 65、去掉一个Vector集合中重复的元素 50 66、Collection 和 Collections的区别。 51 67、Set...

    高等教育自学考试Java语言程序设计(一)试题.doc

    因此,循环最多执行三次,输出结果是三个星号(***)。 3. **对象与内存管理**: - Java中的对象可以通过赋值操作引用彼此。在选项B(`u=v`)中,`u`不再指向原来的`U`实例,而是引用了`v`指向的对象。这可能导致...

    Java全国自考历年考试(参考答案)2.doc

    初始时`x`为10,每次循环`x`减1,因此会执行3次循环,打印三个星号。 **正确答案**: B.*** #### 3. 内存回收情况 - **代码段**: ```java class U { int x, int y; U(int a, int b){x= a; y = b;} void copy...

    Java经典问题答案(带书签).pdf

    - 死锁通常发生在多个线程互相等待对方持有的资源时。 - 出现死锁的四个必要条件:互斥条件、请求和保持条件、不剥夺条件、循环等待条件。 **Synchronized锁与Lock锁的区别** - `synchronized`是Java内置的关键字...

    经典面试题目六道C++

    给出一个字符串 `s = "abc"`,打印出由 `s` 中的所有字符组成的全部可能的排列。 **示例**: 输入:`s = "abc"` 输出:`["abc", "acb", "bac", "bca", "cab", "cba"]` **解题思路**: 1. **回溯算法**:通过不断...

    2013年最新Linux系统运维面试题(附答案)

    - worker模式:多进程和多线程混合模型,通过线程处理请求,适合处理动态内容和高并发连接的场景。 - 查看Apache支持的模块和当前工作模式 - 使用`httpd -l`命令查看模块,使用`httpd -M`命令查看当前工作模式。 ...

    2012创新工场校园招聘笔试题

    - **资源分配**:如果每个进程需要4个资源,有3个并发进程,至少需要10个资源才能避免死锁,因为每个进程可以拿到足够的资源一次完成,不形成循环等待。B选项正确。 8. **哈希冲突处理**: - **方法**:开放定址...

    正则表达式

    / //匹配三个单字字符和一个任意的数字. /\s+java\s+/ //匹配字符串"java" ,并且该串前后可以有一个或多个空格. /[^"] * / //匹配零个或多个非引号字符. 正则表达式的复制字符 字符 含义 ________________...

    Linux运维工程师面试题总结

    `awk` 命令中,`BEGIN{FS=":"}` 设置字段分隔符为冒号,`{print $1}` 打印第一个字段,即行号。 **知识点2:查询以特定字符串结尾的行** - 使用 `grep` 命令。 - **命令示例**: `grep 'abc$' file1` - **解释**: ...

    JAVA开发人员的十大戒律(TXT文件)

    例如,当需要多次比较字符串“ABC”时,可以通过定义一个静态常量来替代硬编码的字符串值。这种方式不仅提高了代码的可维护性,还能避免潜在的拼写错误问题。 #### 五、谨慎选择框架 尽管市场上有许多成熟的Java...

    Java计算机核心编程笔记

    - `continue`:结束本次循环,继续下一次循环。 - `return`:返回函数结果。 - `try`/`catch`/`finally`:异常处理语句。 #### 四、修饰符 - `public`:公共访问级别,允许任何类访问。 - `protected`:受保护访问...

Global site tag (gtag.js) - Google Analytics