zoukankan      html  css  js  c++  java
  • 三个多线程的交替打印

      1 package cn.thread;
      2 
      3 public class ManyThread2 {
      4     public static void main(String[] args) {
      5         MyRunnable1 runnable1 = new MyRunnable1();
      6         MyRunnable2 runnable2 = new MyRunnable2();
      7         MyRunnable3 runnable3 = new MyRunnable3();
      8 
      9         Thread t1 = new Thread(runnable1, "线程1");
     10         Thread t2 = new Thread(runnable2, "线程2");
     11         Thread t3 = new Thread(runnable3, "线程3");
     12 
     13         t1.start();
     14         t2.start();
     15         t3.start();
     16     }
     17 }
     18 
     19 class Print {
     20     public static int count = 0;
     21     public static Object obj = new Object();
     22     public static int x = 1;
     23 
     24     public static void print1(int i) {
     25         synchronized (obj) {
     26             if (x == 1) {
     27                 for (int j = 0; j < 5; j++) {
     28                     count++;
     29                     System.out.println(Thread.currentThread().getName() + ":"+ count+"____i="+i);
     30                 }                
     31                 x = 2;
     32                 try {
     33                     Thread.sleep(200);
     34                 } catch (InterruptedException e) {
     35                     e.printStackTrace();
     36                 }
     37                 obj.notifyAll();
     38             } else {
     39                 try {
     40                     obj.wait();
     41                 } catch (InterruptedException e) {
     42                     e.printStackTrace();
     43                 }
     44             }
     45         }
     46     }
     47 
     48     public static void print2(int i) {
     49         synchronized (obj) {
     50             if (x == 2) {
     51                 for (int j = 0; j < 5; j++) {
     52                     count++;
     53                     System.out.println(Thread.currentThread().getName() + ":"+ count+"____i="+i);
     54                 }                
     55                 x = 3;
     56                 try {
     57                     Thread.sleep(200);
     58                 } catch (InterruptedException e) {
     59                     e.printStackTrace();
     60                 }
     61                 obj.notifyAll();
     62             } else {
     63                 try {
     64                     obj.wait();
     65                 } catch (InterruptedException e) {
     66                     e.printStackTrace();
     67                 }
     68             }
     69         }
     70     }
     71 
     72     public static void print3(int i) {
     73         synchronized (obj) {
     74             if (x == 3) {
     75                 for (int j = 0; j < 5; j++) {
     76                     count++;
     77                     System.out.println(Thread.currentThread().getName() + ":"+ count+"____i="+i);
     78                 }
     79                 x = 1;
     80                 try {
     81                     Thread.sleep(200);
     82                 } catch (InterruptedException e) {
     83                     e.printStackTrace();
     84                 }
     85                 obj.notifyAll();
     86             } else {
     87                 try {
     88                     obj.wait();
     89                 } catch (InterruptedException e) {
     90                     e.printStackTrace();
     91                 }
     92             }
     93         }
     94     }
     95 }
     96 
     97 class MyRunnable1 implements Runnable {
     98     @Override
     99     public void run() {
    100         for (int i = 0; i < 10; i++) {
    101             if (Print.count <= 55) {
    102                 Print.print1(i);
    103             }
    104         }
    105     }
    106 }
    107 
    108 class MyRunnable2 implements Runnable {
    109     @Override
    110     public void run() {
    111         for (int i = 0; i < 10; i++) {
    112             if (Print.count <= 55) {
    113                 Print.print2(i);
    114             }
    115         }
    116     }
    117 }
    118 
    119 class MyRunnable3 implements Runnable {
    120     @Override
    121     public void run() {
    122         for (int i = 0; i < 10; i++) {
    123             if (Print.count < 50) {
    124                 Print.print3(i);
    125             }
    126         }
    127     }
    128 }
    三个多线程的交替打印
  • 相关阅读:
    WPF Step By Step -基础知识介绍
    WPF Step By Step 系列
    设计模式的六大原则
    Java实现二维码生成的方法
    Java 导出Excel
    解析图书 XML
    Maven搭建Spring+SpringMVC+Mybatis+Shiro项目详解
    springboot配置文件的所有属性
    SpringBoot中 application.yml /application.properties常用配置介绍
    Linux 系统目录结构
  • 原文地址:https://www.cnblogs.com/1020182600HENG/p/6044650.html
Copyright © 2011-2022 走看看