- 浏览: 121801 次
- 性别:
- 来自: 抽象空间
最新评论
-
Dancen:
理想状态下jar包的更新当然不应该去修改其中的方法签名等外部依 ...
javamake.jar & javamake-ant15.jar -
mwei:
Dancen 写道javamake可以解决代码之间的依赖问题, ...
javamake.jar & javamake-ant15.jar -
Dancen:
javamake可以解决代码之间的依赖问题,但如果调用的是外部 ...
javamake.jar & javamake-ant15.jar -
kidding87:
看到了楼主的connet by用法,又看到这个很久以前的东西, ...
海螺式初始化二维数组 -
pxlfxl2:
mwei 写道pxlfxl2 写道如果我的需求是要打印A到Z ...
三线程顺序打印N次ABC
记得前一阵子JE上讨论线程顺序打印的面试题,现在有空也练练。
说是,三个线程,其一只打印A,其一只打印B,其一只打印C,要求开启三线程顺序打印多次ABC。
对wait和notify(All)刚刚理解,不能错过这个练习的机会,然后再写个生产者-消费者的程序多练练。写的不好的、需要改进的地方还请JE上的朋友给建议^..^。
-----------------顺序打印A-Z-----------------------------------
你好,提出的问题很好,我在代码下面追加了另一种方法
哈哈,其实要考虑到扩展还会有其他问题,比如说用户说我不打印abc了,我要打印bca,这时你又得改代码,你可以搜搜,其实还有其他的实现,当然,就这个题目来说,你的代码已经足够了。
你好,提出的问题很好,我在代码下面追加了另一种方法
说是,三个线程,其一只打印A,其一只打印B,其一只打印C,要求开启三线程顺序打印多次ABC。
对wait和notify(All)刚刚理解,不能错过这个练习的机会,然后再写个生产者-消费者的程序多练练。写的不好的、需要改进的地方还请JE上的朋友给建议^..^。
public class ThreadABC implements Runnable { public static final int RUN_TOTAL_COUNT=30; //打印ABC的次数 public static volatile boolean arun=true; //开始打印A public static volatile boolean brun=false; public static volatile boolean crun=false; public static final byte[] LOCK=new byte[0]; //互斥器 public void run() { new Thread(new PrintB()).start(); new Thread(new PrintC()).start(); new Thread(new PrintA()).start(); } private static class PrintA implements Runnable{ private int runCount=0; public void run(){ synchronized(LOCK){ while(runCount<RUN_TOTAL_COUNT) if(arun){ LOCK.notifyAll(); System.out.print("A"); runCount++; arun=false; brun=true; crun=false; }else{ try{ LOCK.wait(); }catch(InterruptedException ie){ System.out.println("PrintA InterruptedException occured..."); } } } //end syn } } private static class PrintB implements Runnable{ private int runCount=0; public void run(){ synchronized(LOCK){ while(runCount<RUN_TOTAL_COUNT) if(brun){ LOCK.notifyAll(); System.out.print("B"); runCount++; arun=false; brun=false; crun=true; }else{ try{ LOCK.wait(); }catch(InterruptedException ie){ System.out.println("PrintB InterruptedException occured..."); } } } //end syn } } private static class PrintC implements Runnable{ private int runCount=0; public void run(){ synchronized(LOCK){ while(runCount<RUN_TOTAL_COUNT) if(crun){ LOCK.notifyAll(); System.out.print("C-"); runCount++; arun=true; brun=false; crun=false; }else{ try{ LOCK.wait(); }catch(InterruptedException ie){ System.out.println("PrintC InterruptedException occured..."); } } } //end syn } } //test in main public static void main(String[] args){ new Thread(new ThreadABC()).start(); } }
-----------------顺序打印A-Z-----------------------------------
public class Print implements Runnable { public static final int COUNT=26; //字母的个数 public static final int TIMES=10; //循环打印的次数 public static final byte[] LOCK=new byte[0]; //互斥器 private static volatile int run=0; //每打印一个字母,值会+1 private List<Printor> printors=new ArrayList<Printor>(); //收集所有线程对象 @Override public void run() { for(int i=0;i<COUNT;i++){ //初始化26个线程对象 printors.add(new Printor((char)('A'+i), i)); } for(int i=printors.size()-1;i>=0;i--){ //逆序:依次运行 new Thread(printors.get(i)).start(); } } //test in main public static void main(String[] args){ new Thread(new Print()).start(); } private static class Printor implements Runnable{ private char name; private int id; private int times=0; public Printor(char name,int id){ this.name=name; this.id=id; } @Override public void run() { synchronized(LOCK){ //把门锁上,别人别想进来 while(this.times<TIMES) if(this.id==run%COUNT){ System.out.print(this.name); if(this.id==COUNT-1) System.out.println(); //换行 run++; this.times++; LOCK.notifyAll(); //吼一嗓子:其他的兄弟,你们准备好了吗 }else { try { LOCK.wait(); //我K,白来了,我得出去等(释放锁)... } catch (InterruptedException e) { System.out.println(this.name+"=>exception occurs..."); } } } //结束:释放锁 } } }
评论
3 楼
pxlfxl2
2011-04-17
mwei 写道
pxlfxl2 写道
如果我的需求是要打印A到Z n次呢?那你就得写26个类了
你好,提出的问题很好,我在代码下面追加了另一种方法
哈哈,其实要考虑到扩展还会有其他问题,比如说用户说我不打印abc了,我要打印bca,这时你又得改代码,你可以搜搜,其实还有其他的实现,当然,就这个题目来说,你的代码已经足够了。
2 楼
mwei
2011-03-31
pxlfxl2 写道
如果我的需求是要打印A到Z n次呢?那你就得写26个类了
你好,提出的问题很好,我在代码下面追加了另一种方法
1 楼
pxlfxl2
2011-03-29
如果我的需求是要打印A到Z n次呢?那你就得写26个类了
发表评论
-
泛型<T>的转换问题
2011-04-28 15:03 2在问答里提问,没有得到答案,特开此贴讨论。 代码如下: ... -
fibonacci的几种实现及尾递归
2011-03-27 22:55 3779/** * java version "1. ... -
将一个自然数拆分为若干不重复自然数之和(OO实现)
2011-03-13 22:04 2069原题出处:http://www.iteye ... -
自然数m的立方可写成m个连续奇数之和
2010-10-22 09:49 4416题目: 任何一个自然数m的立方均可写成m个连续奇数之和。 例如 ... -
使用内部类实现多重继承
2010-09-07 19:10 1106最常见的实现多重继承的方式,是implements inter ... -
怎么捕获webwork下载文件时的异常
2010-08-09 17:02 1009使用webwork的文件下载方式,action配置如下: ... -
java.rmi.UnmarshalException: invalid method hash
2010-07-30 16:25 4072今天在应用程序中报了下面异常: java.rmi.Serv ... -
转:java 获取ftp文件大小
2010-07-30 11:46 9781【注】:本代码摘自 http://www.java2s.com ... -
判断字符串是否是数字
2010-03-13 14:47 1042看到一笔试题,如题; 《c程序设计语言》第二版5.2节里有ge ... -
练习:生产者-消费者
2010-03-03 14:50 947关于Object.wait()和Object.notify() ... -
求数组的平衡点
2010-02-27 14:47 2040原文见:http://www.iteye.com/topic/ ... -
怎么记忆Thread.join()
2010-02-23 16:57 2543Thread.join() JDK_API:等待该线程终止。 ... -
海螺式初始化二维数组
2009-12-13 22:33 1394原题见:http://www.iteye.com/topic/ ... -
初涉java多线程(二)
2009-12-04 23:10 945原文:http://huagenli.iteye.com/bl ... -
Collection’modifiers seem not correct when reflect
2009-12-03 22:48 991做练习的时候就抄了如下方法 public static v ... -
对private static 实例变量同步,线程获得的是什么锁?
2009-11-29 11:01 1139初学线程,还是比较愚的。 问题如题,就是在方法中加了synch ... -
初涉java多线程(一)
2009-11-23 22:14 904十一期间看了一点java多 ... -
new StringBuilder() VS new StringBuilder(arg)
2009-09-30 17:35 1295StringBuilder,非线程安全 ... -
一种截取字母汉字混合串的方法(String.getBytes)
2009-08-09 21:37 2095/** * 按字节截取字符串 * @para ... -
一种截取字母汉字混合串的方法(String.split)
2009-08-08 23:28 1626/** * 按字节截取字符串 * @ ...
相关推荐
java三线程接力 红色按钮(10,60) 蓝色按钮(100,60) 绿色按钮(200,60)
编写三个线程:各线程分别显示各自的运行时间,第一个线程每隔1秒钟运行一次,第二个每隔5秒钟运行一次,第三个线程每隔10秒钟运行一次。
创建3个线程,每个线程的工作是在自己的界面随机的显示26个字母中的一个;可通过界面按钮,临时挂起或回复各线程的运行。
PT100三线制电路
三线表的制作,WORD2007,WORD2003最实用版本,保证一学就会
三线表的规范格式,详细介绍三线表的定义、规格、大小以及在word中的格式要求和范例
张卫星三线开花理论.pdf
浅析三线程程序开发思路与实现 关键字:三线程程序
一键实现Word文档三线表格VBA插件
亲爱的,这个是用来教你如何使用电脑来做三线表的。
垂直三线表--科技论文中三线表的变通形式,黄鹂,,科技论文中经常采用的三线表,是由3条平行的水平线组成,将表格划分为上下2个部分,采用
表格经常设计三线表而耗时耗力,采用Microsoft word中的vba自动化设计手段,加载vba程序后能够一键批量处理文档中的所有三线表,方便好用
Multisim仿真文件;使用TL431作为恒流源,采集三线PT100热电阻阻值,使用运放消除导线电阻。
以上提供的是三线反转指标,三线反转是炒股,炒外汇常用的指标。判断趋势使用较为准确,提升交易的准确性!
MT4 股票型三线KDJ 用于期货交易,让喜欢KDJ使用者更好
利用Excel绘制水文地球化学中三线图(Piper图),可充分利用Excel的交互式修改 1、按照已给出的模板,每类型水样,用空行隔开,如实例中井样与泉水样; 2、后点击生成,即可完成 三线图的生成; 3、可给图中离子位置...
三线看盘主图指标通达信指标公式源码.doc
piper三线图计算机绘制,实现了计算机绘制piper三线图的功能,大大提高了工作效率。
三线制串口液晶模块1602K的51C程序,里面有主程序,1602K文件头,包括接线图也在内。三线制的串口液晶接口,不是16线的并口液晶接口。
采用三线制传输机制,通过单片机MCU的I/O实现三线制方式读取DS1302S时钟数据并分别将年、月、日、时间信息分别显示在数码管上。编写按键程序,实现不同按键显示年、月、日、时间等信息。