写两个线程,交替打印数字和字母,一个线程打印 1~26,另一个线程打印字母 A-Z
Posted 旺仔哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了写两个线程,交替打印数字和字母,一个线程打印 1~26,另一个线程打印字母 A-Z相关的知识,希望对你有一定的参考价值。
- 1.使用synchronized
public static void main(String[] args) new Thread(new MyThread(),"p1").start(); new Thread(new MyThread(),"p2").start(); static class MyThread implements Runnable public MyThread() super(); @Override public void run() synchronized (MyThread.class) for (int i = 0; i < 26; i++) if (Thread.currentThread().getName().equals("p1")) System.out.print(i+1); MyThread.class.notifyAll(); try MyThread.class.wait(); catch (InterruptedException e) e.printStackTrace(); else System.out.print((char)('A'+i)); MyThread.class.notifyAll(); try MyThread.class.wait(); catch (InterruptedException e) e.printStackTrace();
- 2.使用信号量Semaphore实现
static Semaphore sp1 = new Semaphore(1); static Semaphore sp2 = new Semaphore(1); public static void main(String[] args) throws InterruptedException sp2.acquire(); new Thread(new MyThread1(sp1,sp2),"p1").start(); new Thread(new MyThread2(sp1,sp2),"p2").start(); static class MyThread1 implements Runnable private Semaphore sp1; private Semaphore sp2; public MyThread1(Semaphore sp1,Semaphore sp2) super(); this.sp1 = sp1; this.sp2 = sp2; @Override public void run() try sp1.acquire(); for (int i = 0; i < 26; i++) System.out.print(i); sp2.release(); sp1.acquire(); // TimeUnit.SECONDS.sleep(3); catch (InterruptedException e) e.printStackTrace(); finally static class MyThread2 implements Runnable private Semaphore sp1; private Semaphore sp2; public MyThread2(Semaphore sp1,Semaphore sp2) super(); this.sp1 = sp1; this.sp2 = sp2; @Override public void run() try sp2.acquire(); for (int i = 0; i < 26; i++) System.out.print((char)('A'+i)); sp1.release(); sp2.acquire(); // TimeUnit.SECONDS.sleep(3); catch (InterruptedException e) e.printStackTrace(); finally
以上是关于写两个线程,交替打印数字和字母,一个线程打印 1~26,另一个线程打印字母 A-Z的主要内容,如果未能解决你的问题,请参考以下文章