0
点赞
收藏
分享

微信扫一扫

多线程练习题

开源分享 2022-02-24 阅读 59
java后端

目录

1.两个线程交替打印1-100

2.三个线程交替打印1-100


1.两个线程交替打印1-100

package com.example.practice.Thread;

/**
 * @author liuxiaobai
 */
public class WindowSaleTicket {
    public static void main(String[] args) {
        Window window = new Window();
        new Thread(window).start();
        new Thread(window).start();
    }
}

class Window implements Runnable {

    int count = 0;

    @Override
    public void run() {
        while (true) {
            synchronized (this) {
                if (count >= 100) {
                    notify();
                    break;
                }
                count++;
                System.out.println(Thread.currentThread().getName() + " " + count);
                notify();
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

2.三个线程交替打印1-100

package com.example.practice.Thread;

class PrintNumber {

    private int number = 1;
    private int windowNumber = 1;

    void firstThreadPrint() {
        synchronized (this) {
            while (windowNumber != 1) {
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(Thread.currentThread().getName() + ": " + number);
            number++;
            windowNumber = 2;
            notifyAll();
        }
    }

    void secondThreadPrint() {
        synchronized (this) {
            while (windowNumber != 2) {
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(Thread.currentThread().getName() + ": " + number);
            number++;
            windowNumber = 3;
            notifyAll();
        }
    }

    void thirdThreadPrint() {
        synchronized (this) {
            while (windowNumber != 3) {
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(Thread.currentThread().getName() + ": " + number);
            number++;
            windowNumber = 1;
            notifyAll();
        }
    }
}

public class WindowSaleTicket {
    public static void main(String[] args) {

        PrintNumber printNumber = new PrintNumber();

        new Thread(() -> {
            for (int i = 0; i < 34; i++) {
                printNumber.firstThreadPrint();
            }
        }).start();
        new Thread(() -> {
            for (int i = 0; i < 33; i++) {
                printNumber.secondThreadPrint();
            }
        }).start();
        new Thread(() -> {
            for (int i = 0; i < 33; i++) {
                printNumber.thirdThreadPrint();
            }
        }).start();
    }
}
举报

相关推荐

0 条评论