博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3个线程每个线程只能打印自己的名字,在屏幕上顺序打印 ABC,打印10次
阅读量:4041 次
发布时间:2019-05-24

本文共 1564 字,大约阅读时间需要 5 分钟。

public class TeatPrintOrder {		public static void main(String args[]){				AtomicInteger atomic = new AtomicInteger();				Print p = new Print();		ThreadTest a = new ThreadTest(p,"A",0,10,atomic);		ThreadTest b = new ThreadTest(p,"B",1,10,atomic);		ThreadTest c = new ThreadTest(p,"C",2,10,atomic);				a.start();b.start();c.start();	}		}class ThreadTest extends Thread{	String name="";	Integer id ;	Print tPrint = null;	int count;	AtomicInteger atomic ;	ThreadTest(Print p,String name,Integer id,int count,AtomicInteger atomic){		this.name = name ;		this.id= id ;		this.tPrint = p ;		this.count = count ;		this.atomic= atomic ;	}	public void run(){		while(count>0){			if((atomic.get() % 3) ==id){				tPrint.PrintName(name);				atomic.getAndAdd(1);				count--;			}		}	}}class Print{	void PrintName(String name){		System.out.print(name);	}}

1.设计上注意,把打印这个对象独立出来,以便控制资源的同步

2.使用atomic类原子性控制线程的执行,此处的取模,相当于一个变量标识

3.如果是打印一遍,使用线程的join(),比较便捷。

static class MyThread extends Thread {    public MyThread (final String name) {        super (name);    }    @Override    public void run () {        System.out.print (currentThread ().getName ());    }}private static void printOnceV2 () throws InterruptedException {    final MyThread threadA = new MyThread ("A");    final MyThread threadB = new MyThread ("B");    final MyThread threadC = new MyThread ("C");    threadA.start ();    threadA.join ();        // 等待 A 运行完,再开始 B    threadB.start ();    threadB.join ();        // 等待 B 运行完,再开始 C    threadC.start ();}

更多的实现方法参考:http://blog.csdn.net/zheng0518/article/details/21728355

你可能感兴趣的文章
coursesa课程 Python 3 programming course_2_assessment_8 sorted练习题
查看>>
在unity中建立最小的shader(Minimal Shader)
查看>>
1.3 Debugging of Shaders (调试着色器)
查看>>
关于phpcms中模块_tag.class.php中的pc_tag()方法的含义
查看>>
vsftp 配置具有匿名登录也有系统用户登录,系统用户有管理权限,匿名只有下载权限。
查看>>
linux安装usb wifi接收器
查看>>
补充自动屏蔽攻击ip
查看>>
多线程使用随机函数需要注意的一点
查看>>
getpeername,getsockname
查看>>
让我做你的下一行Code
查看>>
浅析:setsockopt()改善程序的健壮性
查看>>
关于对象赋值及返回临时对象过程中的构造与析构
查看>>
VS 2005 CRT函数的安全性增强版本
查看>>
SQL 多表联合查询
查看>>
Visual Studio 2010:C++0x新特性
查看>>
drwtsn32.exe和adplus.vbs进行dump文件抓取
查看>>
cppcheck c++静态代码检查
查看>>
在C++中使用Lua
查看>>
一些socket的编程经验
查看>>
socket编程中select的使用
查看>>