• 多线程案例


    1.三个售票窗口同时出售20张票

        public class Demo1
        {
         
            public static void main(String[] args)
            {
                TicketOffice ticketOffice = new TicketOffice(new Object(), 20);
                new Thread(ticketOffice, "窗口1").start();
                new Thread(ticketOffice, "窗口2").start();
                new Thread(ticketOffice, "窗口3").start();
            }
        }
         
        class TicketOffice implements Runnable
        {
            private Object object;
         
            private int ticketNum;
         
            public TicketOffice(java.lang.Object object, int ticketNum)
            {
                this.object = object;
                this.ticketNum = ticketNum;
            }
         
            @Override
            public void run()
            {
                while (ticketNum > 0)
                {
                    synchronized (object)
                    {
                        if (ticketNum <= 0)
                        {
                            System.out.println(Thread.currentThread().getName() + "没有票了");
                        }
                        else
                        {
                            System.out.println(Thread.currentThread().getName() + "卖出了一张票,剩余" + --ticketNum + "张票");
                            try
                            {
                                Thread.sleep(1000L);
                            }
                            catch (InterruptedException e)
                            {
                                e.printStackTrace();
                            }
                        }
                    }
                }
            }
        }

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

        public class Demo2
        {
            public static void main(String[] args)
            {
                Object object = new Object();
                new Thread(new Number(object)).start();
                new Thread(new Character(object)).start();
            }
        }
         
        class Number implements Runnable
        {
            private Object object;
         
            public Number(Object object)
            {
                this.object = object;
            }
         
            @Override
            public void run()
            {
                synchronized (object)
                {
                    for (int i = 1; i < 53; i++)
                    {
                        if (i > 1 && i % 2 == 1)
                        {
                            System.out.print(" ");
                        }
                        System.out.print(i);
                        if (i % 2 == 0)
                        {
                            object.notifyAll();
                            try
                            {
                                object.wait();
                            }
                            catch (InterruptedException e)
                            {
                                e.printStackTrace();
                            }
                        }
                    }
                }
            }
        }
         
        class Character implements Runnable
        {
            private Object object;
         
            public Character(Object object)
            {
                this.object = object;
            }
         
            @Override
            public void run()
            {
                synchronized (object)
                {
                    for (char i = 'A'; i <= 'Z'; i++)
                    {
                        System.out.print(i);
                        object.notifyAll();
                        if (i < 'Z')
                        {
                            try
                            {
                                object.wait();
                            }
                            catch (InterruptedException e)
                            {
                                e.printStackTrace();
                            }
                        }
                    }
                }
            }
        }

    3.

    启动3个线程打印递增的数字, 线程1先打印1,2,3,4,5, 然后是线程2打印6,7,8,9,10, 然后是线程3打印11,12,13,14,15. 接着再由线程1打印16,17,18,19,20….以此类推, 直到打印到75. 程序的输出结果应该为:

    线程1: 1
    线程1: 2
    线程1: 3
    线程1: 4
    线程1: 5

    线程2: 6
    线程2: 7
    线程2: 8
    线程2: 9
    线程2: 10


    线程3: 71
    线程3: 72
    线程3: 73
    线程3: 74
    线程3: 75

        public class Demo3
        {
         
            public static void main(String[] args)
            {
                Object object = new Object();
                new Thread(new PrintRunnable(object,1)).start();
                new Thread(new PrintRunnable(object,2)).start();
                new Thread(new PrintRunnable(object,3)).start();
            }
         
        }
         
        class PrintRunnable implements Runnable
        {
            private static volatile int printNum = 0;
         
            private Object object;
         
            private int threadId;
            
            public PrintRunnable(Object object, int threadId)
            {
                super();
                this.object = object;
                this.threadId = threadId;
            }
         
            @Override
            public void run()
            {
                while (printNum < 75)
                {
                    synchronized (object)
                    {
                        if (printNum / 5 % 3 + 1 == threadId)
                        {
                            for (int i = 0; i < 5; i++)
                            {
                                System.out.println("线程" + threadId + ":" + (++printNum));
                            }
                            object.notifyAll();
                        }
                        else
                        {
                            try
                            {
                                object.wait();
                            }
                            catch (InterruptedException e)
                            {
                                e.printStackTrace();
                            }
                        }
                    }
                }
            }
        }

  • 相关阅读:
    spring mvc 分页
    get/post时中文乱码问题的解决办法
    mysql-day01
    servler配置
    idea
    springMvc 核心配置
    ServletRequest面试题
    Servlet面试题
    Http面试题
    测试文件
  • 原文地址:https://www.cnblogs.com/nnnnmmmm/p/11676079.html
Copyright © 2020-2023  润新知