写两个线程,交替打印数字和字母,一个线程打印 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的主要内容,如果未能解决你的问题,请参考以下文章

面试题:用程序实现两个线程交替打印 0~100 的奇偶数

Java 线程:如何一次使用两个线程打印字母和数字

两个线程交替打印数字(看了就懂版)

经典面试题——两个线程交替打印奇数和偶数

多线程交替打印ABC的多种实现方法

多线程交替打印ABC的多种实现方法