zoukankan      html  css  js  c++  java
  • Java 多线程Thread和Runnable

    Thread:

    class MyThread extends Thread
    {
        private int ticketsCont=5; //一共有5张火车票
    
        private String name; //窗口, 也即是线程的名字
    
        public MyThread(String name){
            this.name=name;
        }
    
        @Override
        public void run(){
    
            while(ticketsCont>0){
                ticketsCont--; //如果还有票,就卖掉一张票
                System.out.println(name+"卖掉了1张票,剩余票数为:"+ticketsCont);
            }
    
        }
    }
    
    public class TicketsThread
    {
        public static void main(String args[]){
    
            //创建三个线程,模拟三个窗口卖票
            MyThread mt1=new MyThread("窗口1");
            MyThread mt2=new MyThread("窗口2");
            MyThread mt3=new MyThread("窗口3");
    
            //启动三个线程,也即是窗口,开始卖票
            mt1.start();
            mt2.start();
            mt3.start();
    
        }
    }
    窗口1卖掉了1张票,剩余票数为:4
    窗口1卖掉了1张票,剩余票数为:3
    窗口1卖掉了1张票,剩余票数为:2
    窗口1卖掉了1张票,剩余票数为:1
    窗口1卖掉了1张票,剩余票数为:0
    窗口3卖掉了1张票,剩余票数为:4
    窗口2卖掉了1张票,剩余票数为:4
    窗口3卖掉了1张票,剩余票数为:3
    窗口3卖掉了1张票,剩余票数为:2
    窗口3卖掉了1张票,剩余票数为:1
    窗口3卖掉了1张票,剩余票数为:0
    窗口2卖掉了1张票,剩余票数为:3
    窗口2卖掉了1张票,剩余票数为:2
    窗口2卖掉了1张票,剩余票数为:1
    窗口2卖掉了1张票,剩余票数为:0
    View Code

    Runnable接口:

    class MyThread2 implements Runnable
    {
        private int ticketsCont=5; //一共有5张火车票
    
        @Override
        public void run(){
            while(true){
                synchronized(this){
                    if(ticketsCont<=0){
                        break;
                    }
                    ticketsCont--; //如果还有票,就卖掉一张票
    
                    System.out.println(Thread.currentThread().getName()+"卖掉了1张票,剩余票数为:"+ticketsCont);
    
                        /*try{
                            Thread.sleep(50);  //通过阻塞程序来查看效果
                        }
                        catch(Exception e){
                            System.out.println(e);
                        }*/
                }
            }
    
        }
    }
    
    public class TicketsRunnable
    {
        public static void main(String args[]){
    
            MyThread2 mt=new MyThread2();
            //创建三个线程来模拟三个售票窗口
            Thread th1=new Thread(mt,"窗口1");
            Thread th2=new Thread(mt,"窗口2");
            Thread th3=new Thread(mt,"窗口3");
    
            //启动三个线程,也即是三个窗口,开始卖票
            th1.start();
            th2.start();
            th3.start();
        }
    }
    窗口1卖掉了1张票,剩余票数为:4
    窗口1卖掉了1张票,剩余票数为:3
    窗口1卖掉了1张票,剩余票数为:2
    窗口1卖掉了1张票,剩余票数为:1
    窗口1卖掉了1张票,剩余票数为:0
    View Code

    修改MyThread2

    class MyThread2 implements Runnable
    {
        private int ticketsCont=5; //一共有5张火车票
        @Override
        public void run() {
            while (true) {
                if (ticketsCont <= 0) {
                    break;
                }
                ticketsCont--; //如果还有票,就卖掉一张票
                System.out.println(Thread.currentThread().getName() + "卖掉了1张票,剩余票数为:" + ticketsCont);
            }
        }
    }
    窗口1卖掉了1张票,剩余票数为:3
    窗口3卖掉了1张票,剩余票数为:2
    窗口2卖掉了1张票,剩余票数为:3
    窗口3卖掉了1张票,剩余票数为:0
    窗口1卖掉了1张票,剩余票数为:1
    View Code

    Thread类是多个线程分别完成自己的任务,Runnable是多个线程共同完成一个任务。

    建议使用Runnable这种方式创建线程。 程序中的同一资源指的是同一个Runnable对象。安全的卖票程序中需要加入同步synchronized。

    http://www.cnblogs.com/Li-Cheng/p/4332179.html

  • 相关阅读:
    app测试更多机型系统解决方法
    Dsyy的第一篇博文~
    linux服务器下安装node
    android UI进阶之实现listview的下拉加载
    android应用开发全程实录用户界面部分章节你真的会用最简单的TextView么?
    android应用开发全程实录你有多熟悉listview?
    android应用开发全程实录实现甩动拨打和挂断电话
    android应用开发全程实录关于google map的部分章节漂亮的气泡地图
    android UI进阶之用ViewPager实现欢迎引导页面
    android UI进阶之实现listview中checkbox的多选与记录
  • 原文地址:https://www.cnblogs.com/hongdada/p/6093985.html
Copyright © 2011-2022 走看看