JAVA多线程

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

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

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

 

 

 

 

题目:有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 Runnable
16     {
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 Runnable
18     {
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 }

 

posted @ 2016-06-24 16:54  hxy_has_been_used  阅读(166)  评论(0编辑  收藏  举报