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

  • 相关阅读:
    项目管理软件选择:redmine or JIRA
    为已编译的DLL附带强命名
    NET简单的一个画图程序
    公共的Json操作类
    ASP.NET 程序优化
    提高ASP.NET页面载入速度的方法
    DataTable快速定制之Expression属性表达式
    TCP和UDP Client 代码
    Jquery实现异步上传图片
    C语言Socket编程(计算机网络作业)
  • 原文地址:https://www.cnblogs.com/hongdada/p/6093985.html
Copyright © 2011-2022 走看看