zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    MySQL数据库触发器
    软碟通制作fedora17 U盘启动的方法
    编译自己功能定制的Fedora7内核
    SUSE Linux 10配置裸设备(raw devices)
    linux之cut用法
    python---opencv常用函数
    vscode安装以及如何连接服务器
    pip 安装包问题汇总
    conda创建环境失败的解决方法
    git操作
  • 原文地址:https://www.cnblogs.com/huoxiayu/p/5614702.html
Copyright © 2011-2022 走看看