博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA多线程
阅读量:4639 次
发布时间:2019-06-09

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

进程:程序的执行过程(动态概念)。它持有资源(内存、文件)和线程。

线程:程序执行流的最小单元。线程共享进程的资源。

线程的交互:互斥(竞争)和同步(合作)。

 

 

 

 

题目:有A,B,C三个线程,A线程输出A,B线程输出B,C线程输出C,要求,同时启动三个线程,按顺序输出ABC,循环10次。

PrintLetter.java:

1 public class PrintLetter 2 { 3     private char letter = 'A'; 4      5     public char getLetter() 6     { 7         return letter; 8     } 9 10     public void next()11     {12         letter = (char) ((letter - 64) % 3 + 65);13     }14     15     public void print()16     {17         System.out.print(letter);18     }19 }

ThreeThreadPrintABC.java:

1 public class ThreeThreadPrintABC 2 { 3     public static void main(String[] args) 4     { 5         ThreeThreadPrintABC foo = new ThreeThreadPrintABC(); 6         PrintLetter printLetter = new PrintLetter(); 7         Thread a = new Thread(foo.new PrintRunnable(printLetter, 'A')); 8         Thread b = new Thread(foo.new PrintRunnable(printLetter, 'B')); 9         Thread c = new Thread(foo.new PrintRunnable(printLetter, 'C'));10         a.start();11         b.start();12         c.start();13     }14     15     private class PrintRunnable implements Runnable16     {17         private char letter;18         private PrintLetter printLetter;19         20         public PrintRunnable(PrintLetter printLetter, char letter)21         {22             this.printLetter = printLetter;23             this.letter = letter;24         }25         26         public void run()27         {28             for(int i = 0; i < 10; i++)29             {30                 synchronized(printLetter)31                 {32                     while(letter != printLetter.getLetter())33                     {34                         try 35                         {36                             printLetter.wait();37                         } 38                         catch (InterruptedException e) 39                         {40                             e.printStackTrace();41                         }42                     }43                     printLetter.print();44                     printLetter.next();45                     printLetter.notifyAll();46                 }47             }48         }49     }50 }

OR:

1 public class ThreeThreadPrintABC 2 { 3     private int state = 0; 4     private Object obj = new Object(); 5      6     public static void main(String[] args) 7     { 8         ThreeThreadPrintABC foo = new ThreeThreadPrintABC(); 9         Thread a = new Thread(foo.new PrintRunnable('A'));10         Thread b = new Thread(foo.new PrintRunnable('B'));11         Thread c = new Thread(foo.new PrintRunnable('C'));12         a.start();13         b.start();14         c.start();15     }16     17     private class PrintRunnable implements Runnable18     {19         private char letter;20 21         22         public PrintRunnable(char letter)23         {24             this.letter = letter;25         }26         27         public void run()28         {29             while(state < 30)30             {31                 synchronized(obj)32                 {33                     if(letter == state % 3 + 65)34                     {35                         System.out.print(letter);36                         letter = (char) ((letter - 64) % 3 + 65);37                         state++;38                     }39                 }40             }41         }42     }43 }

 

转载于:https://www.cnblogs.com/huoxiayu/p/5614702.html

你可能感兴趣的文章
[转][译]ASP.NET MVC 4 移动特性
查看>>
SOC CPU
查看>>
get_result --perl
查看>>
163镜像地址
查看>>
ehcache memcache redis 三大缓存男高音
查看>>
eclipse 快捷键Open Implementation 直接退出
查看>>
minix中管道文件和设备文件的读写
查看>>
JAXB - Annotations, Annotations for Enums: XmlEnum, XmlEnumValue
查看>>
context 插图
查看>>
文件管理器中不支持的wma歌曲也显示可以播放的音乐图标
查看>>
Java基础学习-流程控制语句
查看>>
Shell中read的常用方式
查看>>
01javascript数据类型
查看>>
asp.net实现md5加密方法详解
查看>>
AJAX
查看>>
table 的thead th 固定 tbody滚动例子
查看>>
并行计算思考----回溯法求解数独问题
查看>>
设计模式:模板模式
查看>>
和菜鸟一起学OK6410之ADC模块
查看>>
代理 模式
查看>>