zoukankan      html  css  js  c++  java
  • JAVA线程初体验

    线程的创建

    线程的启动和停止

    /**
     * 演员类 继承Thread类
     * @author Administrator
     *
     */
    public class Actor extends Thread {
        //每个线程都有一个run方法  我们可以在run方法中来完成我们想要线程完成的任务
        public void run(){
            System.out.println(getName()+"是一个演员");
            
            int count=0;
            System.out.println(getName()+"登台演出"+(++count));
            
            
            System.out.println(getName()+"演出结束");
        }
        public static void main(String[] args){
            Thread actor = new Actor();//创建一个线程
            actor.setName("程咬金");//设置线程名称
            actor.start();//启动线程
        }
    }
    package com.imooc;
    /**
     * 演员类 继承Thread类
     * @author Administrator
     *
     */
    public class Actor extends Thread {
        //每个线程都有一个run方法  我们可以在run方法中来完成我们想要线程完成的任务
        public void run(){
            System.out.println(getName()+"是一个演员");
            
            int count=0;
            boolean keepRunning = true;
            //只要keepRunning不为false 那么线程将一直运行
            while(keepRunning)
            {
                System.out.println(getName()+"登台演出"+(++count));
                if(count == 100)
                {
                    //当演出场次达到100次的时候 停止演出
                    keepRunning =  false;
                }
                //每次出场演出的速度太快 我们可以让演员每演完10场的时候休息1秒
                if(count%10 == 0){
                    try {
                        System.out.println("太累了,休息1秒");
                        Thread.sleep(1000);//这里是以毫秒计算的1000等于1秒
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
            
            System.out.println(getName()+"演出结束");
        }
        public static void main(String[] args){
            Thread actor = new Actor();//创建一个线程
            actor.setName("Mr.Thread");//设置线程名称
            actor.start();//启动线程
            
            //创建一个新的线程 在构造方法中可以传入线程的名称
            Thread actree = new Thread(new Actree(),"Mr.Runnable");
            actree.start();
        }
    }
    class Actree implements Runnable
    {
    
        @Override
        public void run() {
            //Runnable中没有getName() 方法  我们可以使用 Thread的currentThread()方法获得当前的线程
            System.out.println(Thread.currentThread().getName()+"是一个演员");
                    
            int count=0;
            boolean keepRunning = true;
            //只要keepRunning不为false 那么线程将一直运行
            while(keepRunning)
            {
                //
                System.out.println(Thread.currentThread().getName()+"登台演出"+(++count));
                if(count == 100)
                {
                    //当演出场次达到100次的时候 停止演出
                    keepRunning =  false;
                }
                //每次出场演出的速度太快 我们可以让演员每演完10场的时候休息1秒
                if(count%10 == 0){
                    try {
                        System.out.println("太累了,休息1秒");
                        Thread.sleep(1000);//这里是以毫秒计算的1000等于1秒
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
            
            System.out.println(Thread.currentThread().getName()+"演出结束");
        }
        
    }

     模拟两只军队在舞台上表演战斗

    军队类

    public class Army implements Runnable {
        //volatile 是java的关键字  可见性  使得keepRunning可以接受外部线程的赋值
        volatile boolean keepRunning = true;
        @Override
        public void run() {
            while(keepRunning)
            {
                //让军队发起5连攻
                for(int i=0;i<5;i++){
                    System.out.println(Thread.currentThread().getName()+"发起进攻【"+i+"】");
                    Thread.yield();//yield()方法可以让线程让出处理器时间 和其他的线程共同争夺处理器资源
                }
                
            }
            System.out.println(Thread.currentThread().getName()+"战斗结束");
        }
    
    }

    舞台类

    /**
     * 舞台类 也是一个线程
     * @author Administrator
     *
     */
    public class Stage extends Thread {
        public void run(){
            Army armyTaskSuiJun = new Army();
            Army armyTaskRevolt = new Army();
            
            Thread armySuiJun = new Thread(armyTaskSuiJun,"隋军");
            Thread armyRevolt = new Thread(armyTaskRevolt,"农民起义军");
            
            armySuiJun.start();
            armyRevolt.start();
            
            //让舞台休眠50毫秒  可以让观众安静的观看演出
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            armyTaskSuiJun.keepRunning = false;
            armyTaskRevolt.keepRunning = false;
            
            try {
                armyRevolt.join();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            
        }
        public static void main(String[] args) {
            new Stage().start();
        }
    
    }

     关键先生类

    package com.imooc;
    /**
     * 关键先生
     * @author Administrator
     *
     */
    public class KeyPersonThread extends Thread {
        public void run(){
            System.out.println(getName()+"出场");
            for(int i=1;i<=10;i++){
                System.out.println(getName()+"进攻隋军"+i+"次");
            }
        }
    }

    舞台类  加入了关键先生代码

    package com.imooc;
    /**
     * 舞台类 也是一个线程
     * @author Administrator
     *
     */
    public class Stage extends Thread {
        public void run(){
            System.out.println("请观看隋唐演义");
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e2) {
                // TODO Auto-generated catch block
                e2.printStackTrace();
            }
            System.out.println("大幕徐徐拉开......");
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e2) {
                // TODO Auto-generated catch block
                e2.printStackTrace();
            }
            Army armyTaskSuiJun = new Army();
            Army armyTaskRevolt = new Army();
            
            Thread armySuiJun = new Thread(armyTaskSuiJun,"隋军");
            Thread armyRevolt = new Thread(armyTaskRevolt,"农民起义军");
            
            armySuiJun.start();
            armyRevolt.start();
            
            //让舞台休眠50毫秒  可以让观众安静的观看演出
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println("正当双方激战甚酣,半路杀出个程咬金");
            Thread mrCheng = new KeyPersonThread();
            mrCheng.setName("程咬金 ");
            
            System.out.println("程咬金的理想就是结束战斗,使人民安居乐业");
            //正确停止线程的方法 正确的停止线程的方法应该使用停止标志
            armyTaskSuiJun.keepRunning = false;
            armyTaskRevolt.keepRunning = false;
            //stop是错误的 不应该出现我们的代码中 他会使得线程戛然而止 使得线程不能够正常的结束 甚至没有执行完循环 以及程序的清理工作
    //        armySuiJun.stop();
    //        armyRevolt.stop();
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            mrCheng.start();
            //join方法使其他线程等待mrCheng执行完在继续执行
            try {
                mrCheng.join();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            System.out.println("战争结束,人民安居乐业");
            
            
            
        }
        public static void main(String[] args) {
            new Stage().start();
        }
    
    }
  • 相关阅读:
    站立会议(二)
    站立会议(一)
    买书优惠问题
    软件的NABCD----安装部分
    你的灯亮着吗读书笔记(一)
    软件工程概论---环状二维数组最大子数组和
    梦断代码读书笔记(三)
    梦断代码读书笔记(二)
    课程作业3.10
    软件工程作业提交3.06
  • 原文地址:https://www.cnblogs.com/mrluotong/p/5947317.html
Copyright © 2011-2022 走看看