java 多线程
来源:互联网 发布:网络翻墙工具app 编辑:程序博客网 时间:2024/06/15 08:21
每个java程序启动后,虚拟机将自动创建一个主线程。java中通过以下两种方式自定义线程:
(1)创建 java.lang.Thread 类的子类,重写该类的 run方 法
(2)创建 java.lang.Runnable接口的实现类,实现接口 中的 run 方法
下面用这两种方法实现3个线程依次打印ABC,并且循环10次。
(1)基于Thread 类的方法(该方法来自网络)
class FirstPrintThead extends Thread{private AtomicInteger synObj;private int flag;private int count=0;public FirstPrintThead(AtomicInteger synobj,int flag){ this.synObj=synobj; this.flag=flag; }@Overridepublic void run() { while(true){ synchronized (synObj) {if(synObj.get()%3==flag){synObj.set(synObj.get()+1);count++;System.out.println(Thread.currentThread().getName());synObj.notifyAll();if(count==10)break;}else{try {synObj.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}} }}}测试代码:
public class PrintTest {public static void main(String[] args) {AtomicInteger synobj=new AtomicInteger(0);Thread th1=new FirstPrintThead(synobj, 0);th1.setName("A");Thread th2 =new FirstPrintThead(synobj, 1);th2.setName("B");Thread th3 =new FirstPrintThead(synobj, 2);th3.setName("C");th1.start();th2.start();th3.start();}}
(2)Runnable
public class SecondPrintThread implements Runnable{private AtomicInteger synObj=new AtomicInteger(0);private static int PRINT_NUM=10;private int count1=0;private int count2=0;private int count3=0;@Overridepublic void run() {print();}public void print(){String name=Thread.currentThread().getName();while(true){synchronized (synObj) {if(synObj.get()%3==0&&"A".equals(name)&&count1<PRINT_NUM){count1++;synObj.set(synObj.get()+1);System.out.println(name);synObj.notifyAll();}elseif(synObj.get()%3==1&&"B".equals(name)&&count2<PRINT_NUM){count2++;synObj.set(synObj.get()+1);System.out.println(name);synObj.notifyAll();}elseif(synObj.get()%3==2&&"C".equals(name)&&count3<PRINT_NUM){count3++;synObj.set(synObj.get()+1);System.out.println(name);synObj.notifyAll();}else {try {synObj.wait();} catch (InterruptedException e) {e.printStackTrace();}}if(count1==10&&count2==10&&count3==10)break;}}}}测试代码:
public class PrintTest {public static void main(String[] args) {Runnable runnable=new SecondPrintThread();Thread th1 =new Thread(runnable,"A");Thread th2 =new Thread(runnable,"B");Thread th3 =new Thread(runnable,"C");th1.start();th2.start();th3.start();}}
0 0
- 【Java多线程】多线程死锁
- Java 多线程
- java 多线程
- java多线程
- JAVA多线程
- java多线程
- JAVA多线程
- java多线程
- JAVA 多线程
- Java多线程
- java多线程
- JAVA 多线程
- Java 多线程
- Java 多线程
- java多线程
- Java 多线程
- Java多线程
- java 多线程
- UIButton 设置标题和图片的使用方式
- Ubuntu下对ROS进行开发的eclipse环境
- 最好最易懂的Git教学——分享“好麻烦部落格”Git教学(2)
- HttpClient在使用中有两个超时时间 区别
- python读取leveldb数据
- java 多线程
- 英雄无敌3 Def 文件对应生物列表
- linux 下svn搭建
- [我们是这样理解语言的-2]统计语言模型
- [动态规划]最大连续子序列和
- 初学Ibatis
- 怎样运行地理处理工具 Geoprocessing & Geoprocessor & IGPProcess
- Gonet2 游戏服务器框架解析之Agent(1)
- jvm 内存分析