美文网首页
Java多线程练习题

Java多线程练习题

作者: 我不懂我不懂a | 来源:发表于2021-03-04 22:43 被阅读0次
  1. 两个线程交替打印1212121212

这题使用了原子的一个状态类表示当前可执行的线程。

/**
 * @Author: tjc
 * @description
 * @Date Created in 14:35 2021-03-03
 * 两个线程交替打印1212121212
 */
public class Demo6 {

    public static void main(String[] args) {
        AtomicInteger i = new AtomicInteger(0);
        new Thread(new Print1(i)).start();
        new Thread(new Print2(i)).start();

    }

}

class Print1 implements Runnable{
    private AtomicInteger i;

    public Print1(AtomicInteger i) {
        this.i = i;
    }

    public void run() {
        while(true) {
            if(i.get() == 0) {
                System.out.print("1");
                i.compareAndSet(0, 1);
            }
        }
    }
}

class Print2 implements Runnable{
    private AtomicInteger i;

    public Print2(AtomicInteger i) {
        this.i = i;
    }


    public void run() {
        while(true) {
            if(i.get() == 1) {
                System.out.print("2");
                i.compareAndSet(1, 0);
            }
        }
    }
}

  1. 通过 N 个线程顺序循环打印从 0 至 100

/**
 * @Author: tjc
 * @description
 * @Date Created in 16:05 2021-03-03
 * 通过 N 个线程顺序循环打印从 0 至 100
 */
public class Demo3 {

    public static void main(String[] args) {
        AtomicInteger curThread = new AtomicInteger(1);
        AtomicInteger count = new AtomicInteger(0);
        new Thread(new PrintTask(1, 5, curThread, count)).start();
        new Thread(new PrintTask(2, 5, curThread, count)).start();
        new Thread(new PrintTask(3, 5, curThread, count)).start();
        new Thread(new PrintTask(4, 5, curThread, count)).start();
        new Thread(new PrintTask(5, 5, curThread, count)).start();
    }
}

class PrintTask implements Runnable {

    private AtomicInteger count;
    private int no;
    private int maxNum;
    private AtomicInteger curThread;

    private boolean start = true;

    public PrintTask(int no, int maxNum, AtomicInteger curThread, AtomicInteger count) {
        this.no = no;
        this.maxNum = maxNum;
        this.count = count;
        this.curThread = curThread;
    }

    public void turn() {
        if (curThread.get() >= maxNum) {
            curThread.set(1);
        } else {
            curThread.incrementAndGet();
        }
    }
    
    public void run() {
        while (start) {
            synchronized (curThread) {
                while (no != curThread.get()) {
                    try {
                        curThread.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                turn();
                if (count.get() > 100) {
                    start = false;
                    curThread.notifyAll();
                    break;
                }
                System.out.println("thread" + no + ": " + count.get());
                count.getAndIncrement();
                curThread.notifyAll();
            }
        }
        System.out.println("thread" + no + " end.");
    }
}

相关文章

  • Java多线程练习题

    两个线程交替打印1212121212 这题使用了原子的一个状态类表示当前可执行的线程。 通过 N 个线程顺序循环打...

  • 带你搞懂Java多线程(五)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三)带你搞懂Java多线程(四) ...

  • 带你搞懂Java多线程(六)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三)带你搞懂Java多线程(四)带...

  • Java多线程目录

    Java多线程目录 Java多线程1 线程基础Java多线程2 多个线程之间共享数据Java多线程3 原子性操作类...

  • java多线程--Callable

    **移步[java多线程系列文章]Java多线程(二十二)---LockSupport工具Java 停止线程 一、...

  • android 多线程 — 线程的面试题和答案

    这里都是我从各个地方找来的资料,鸣谢: Java多线程干货系列—(一)Java多线程基础 JAVA多线程和并发基础...

  • 5月份第一周学习安排

    学习内容: java多线程及线程同步的方法(使用) java多线程各种同步方法的原理和优缺点 java多线程设计模...

  • 带你搞懂Java多线程(四)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三) 什么是线程间的协作 线程之间...

  • java多线程面试练习题

    一, 创建两个线程,其中一个输出1-52,另外一个输出A-Z。输出格式要求:12A 34B 56C 78D 1.s...

  • Java基础(六)

    多线程 Java多线程并发 1.1 JAVA 并发知识库 1.2 JAVA 线程实现/创建方式 1.2.1 继承 ...

网友评论

      本文标题:Java多线程练习题

      本文链接:https://www.haomeiwen.com/subject/mkslqltx.html