网上一个有意思的题目:
有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC.
以下是我的实现方式:
public class Main {
public static void main(String[] args){
Data data=new Data();
new ThreadA("A",data).start();
new ThreadB("B",data).start();
new ThreadC("C",data).start();
}
}
public class ThreadA extends Thread{
private Data data;
public ThreadA(String name,Data data){
super(name);
this.data=data;
}
public void run(){
try{
for(int i=0;i<10;i++){
data.writeA();
Thread.sleep(1000);
}
}catch(InterruptedException e){
}
}
}
public class ThreadB extends Thread{
private Data data;
public ThreadB(String name,Data data){
super(name);
this.data=data;
}
public void run(){
try{
for(int i=0;i<10;i++){
data.writeB();
Thread.sleep(1000);
}
}catch(InterruptedException e){
}
}
}
public class ThreadC extends Thread{
private Data data;
public ThreadC(String name,Data data){
super(name);
this.data=data;
}
public void run(){
try{
for(int i=0;i<10;i++){
data.writeC();
Thread.sleep(1000);
}
}catch(InterruptedException e){
}
}
}
public class Data {
private DataBlock block=new DataBlock();
public void writeA()throws InterruptedException{
block.lockA();
try{
System.out.print("A");
}finally{
block.unlockA();
}
}
public void writeB()throws InterruptedException{
block.lockB();
try{
System.out.print("B");
}finally{
block.unlockB();
}
}
public void writeC()throws InterruptedException{
block.lockC();
try{
System.out.print("C");
}finally{
block.unlockC();
}
}
}
package com.thread.xunlei;
public class DataBlock {
private int flag=1;
public synchronized void lockA() throws InterruptedException{
while( flag!=1 ){
wait();
}
}
public synchronized void unlockA(){
flag=2;
notifyAll();
}
public synchronized void lockB() throws InterruptedException{
while( flag!=2 ){
wait();
}
}
public synchronized void unlockB(){
flag=3;
notifyAll();
}
public synchronized void lockC() throws InterruptedException{
while( flag!=3 ){
wait();
}
}
public synchronized void unlockC(){
flag=1;
notifyAll();
}
}
分享到:
相关推荐
有三条线程,可以分别输出A、B、C字符,现想办法控制输出顺序,使得顺序为ABCABC......ABC[共10组],并且每条线程只能启动一次,不能多次启动。 通过一个标志位来处理的方式虽然可以实现效果,但是还不够安全,极...
有三条线程,可以分别输出A、B、C字符,现想办法控制输出顺序,使得顺序为ABCABC......ABC[共10组],并且每条线程只能启动一次,不能多次启动。 需要3条线程输出不同的字符,分别为A、B、C,并且顺序要固定住:...
【编程】python考试最新试题及答案解析练习 一、选择题 1.Python语句 "ab"+"c"*2 的运行结果是( ) A.abc2 B.abcabc C.abcc D.ababcc 2.在python语言中表示"x属于区间[a,b)" 的正确表达式是( ) A.a x or...
下面哪个不是Python合法的标识符( ) A.int_3 B.30XL C.self D._abc 4.Python语句 "ab"+"c"*2 的运行结果是( ) A.abc2 B.abcabc C.abcc D.ababcc 5.运行下列 Python程序,结果正确的是( ) a=18 b=7 c=...
一个多线程的题:定义三个线程ID分别为ABC,每个线程打印10遍自己的线程ID,按ABCABC……的顺序进行打印输出。 我的解法: from threading import Thread, Lock # 由_acquire解锁执行后释放_release锁 def _print(_...
cpp代码-abcabc.cpp
三个线程顺序打印问题2.1.1 题目2.1.2 题目分析2.1.3 我的答案2.2 生产者消费者问题2.2.1 题目2.2.2 题目分析2.2.3 我的答案 源码地址:https://github.com/nieandsun/concurrent-study.git 1 wait、notify、...
主要介绍了java信号量控制线程打印顺序的示例,如ABCABC这样输出线程,大家参考使用吧
[ {“Akey”:”Avalue”},{“Akey1”:”Avalue1”}, {“Bkey”:”Bvalue”},{“Bkey1”:”Bvalue1”}, ] hashes {“you”:”a”,”me”:”b”,”he”:”c”} 注释标志 这里是注释 --> 旧版本的freemarker采用...
答:(3)28wed 不能作为VB中的变量,在VB中变量名第一个字符必须是英文字母。 3.3 下列符号哪一个是VB中的合法变量名? (1)x23 (2)8xy (3)END (4)X8[B] 答:(1)x23 为合法变量名。 3.8 表达式2*3^2+2*8/4...
var reg1 = /a/; var reg2 = /a/g; console.log(reg1.test('abcabc')); // true console.log(reg1.test('abcabc')); // true console.log(reg1.test('abcabc')); // true console.log(reg1.test('abcabc')); // true...
char s[]="ABCABC" s1[]="AC" s2[]="xy" 将s1中字符与s中字符比对 如有相同的九用s2中字符替换
lfcs_notes 常用表达 特点 定义 例子 结果 ...前面的一个或多个字符 a + bc abc,abc ? 空或前一个字符 a?bc 公元前,abc ^ $ 空字符串 grep并不支持所有正则表达式。作为替代,可以使用egrep
string pattern1 = @a.*c; // greedy match Regex regex = new Regex(pattern1); regex.Match(abcabc); // return abcabc 非贪婪匹配 在满足匹配时,匹配尽可能短的字符串,使用?来表示非贪婪匹配 string pattern1
sferfrefwefeqrfrefref
txt格式的Encriptado Vigenere。 实施纲领性工作,并在维吉涅尔省的城市历史档案中... 从本质上来说,“ b”本身就是“ a”和“ a”本身就是“”。 由ejemplo,com entreda tenemos la cadena abcABC1,prima parte es
我会尽快谈谈这个克隆更多的在我的网站。 建于 React.js Redux工具包(针对全局状态) Firebase(用于后端身份验证,存储和托管) 条带集成(用于付款处理) 实时链接和演示 上面的演示中描绘的是本教程提供的...
4.号卡属性管理:普通号,优质号,AA,ABAB,AABB,AAAB,ABC,ABCD,ABCABC 5.号卡状态:在库,已售,已激活,已返点 第二部分:业务流程 1.新卡入库:单个添加与批量添加连续号码 2.销售录入(也称号卡分配、拿货记录)...
下次如果我们添加一个“a”,如果队列有“bc”,那么可以在最后的字符串中添加“a”,队列将更新为“ca”。 (如果队列中有“abc”,则不能添加“a”,这违反了问题描述) 来自 409:对于那些出现奇数的字符,我们...