zoukankan      html  css  js  c++  java
  • 《Java多线程编程核心技术》读后感(十五)

     

     

    线程的状态

    线程对象在不同的运行时期有不同的状态,状态信息就存在与State枚举类中。

    验证New,Runnable,Terminated

    new:线程实例化后还从未执行start()方法时的状态

    runnable:线程进入运行的状态

    terminated:线程被销毁时的状态

    package Seven;
    
    public class MyThread extends Thread {
    
        public MyThread() {
            System.out.println("构造方法中的状态:" + Thread.currentThread().getState());
        }
    
        @Override
        public void run() {
            System.out.println("run方法中的状态:" + Thread.currentThread().getState());
        }
    }
    package Seven;
    
    public class Run {
    
        // NEW,
        // RUNNABLE,
        // TERMINATED,
    
        // BLOCKED,
        // WAITING,
        // TIMED_WAITING,
    
        public static void main(String[] args) {
            try {
                MyThread t = new MyThread();
                System.out.println("main方法中的状态1:" + t.getState());
                Thread.sleep(1000);
                t.start();
                Thread.sleep(1000);
                System.out.println("main方法中的状态2:" + t.getState());
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
        }
    
    }

    注意:构造方法中的日志时main主线程的

    验证Time_waiting

    Time_waiting:线程执行了Thread.sleep()

    package Seven;
    
    public class MyThread extends Thread {
    
        @Override
        public void run() {
            try {
                System.out.println("begin sleep");
                Thread.sleep(10000);
                System.out.println("  end sleep");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    package Seven;
    
    public class Run {
        // NEW,
        // RUNNABLE,
        // TERMINATED,
    
        // BLOCKED,
        // WAITING,
        // TIMED_WAITING,
    
        public static void main(String[] args) {
            try {
                MyThread t = new MyThread();
                t.start();
                Thread.sleep(1000);
                System.out.println("main方法中的状态:" + t.getState());
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
        }
    }

     验证Blocked

    blocked:出现在某一个线程等待锁的时候

    package Seven;
    
    public class MyService {
        synchronized static public void serviceMethod() {
            try {
                System.out.println(Thread.currentThread().getName() + "进入了业务方法!");
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    
    }
    package Seven;
    
    public class MyThread1 extends Thread {
    
        @Override
        public void run() {
            MyService.serviceMethod();
        }
    
    }
    package Seven;
    
    public class MyThread2 extends Thread {
    
        @Override
        public void run() {
            MyService.serviceMethod();
        }
    
    }
    package Seven;
    
    public class Run {
        // NEW,
        // RUNNABLE,
        // TERMINATED,
        // BLOCKED,
        // WAITING,
        // TIMED_WAITING,
    
        public static void main(String[] args) throws InterruptedException {
            MyThread1 t1 = new MyThread1();
            t1.setName("a");
            t1.start();
            MyThread2 t2 = new MyThread2();
            t2.setName("b");
            t2.start();
            //Thread.sleep(1000);
            System.out.println("main方法中的t2状态:" + t2.getState());
    
        }
    }

    验证waiting

    waiting:是线程执行了object.wait()方法后所处的状态

    package Seven;
    
    public class Lock {
        
        public static final Byte lock = new Byte("0");
    
    }
    package Seven;
    
    public class MyThread extends Thread {
    
        @Override
        public void run() {
            try {
                synchronized (Lock.lock) {
                    Lock.lock.wait();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    package Seven;
    
    public class Run {
        // NEW,
        // RUNNABLE,
        // TERMINATED,
        // BLOCKED,
        // WAITING,
        // TIMED_WAITING,
    
        public static void main(String[] args) {
            try {
                MyThread t = new MyThread();
                t.start();
                Thread.sleep(1000);
                System.out.println("main方法中的t状态:" + t.getState());
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
        }
    }

  • 相关阅读:
    bae问题
    union intersect minus
    在搭建SpringMvc Hibernate框架时遇到的问题
    详细解读Spring2.5 +Struts1.3 框架(使用Spring声明式事物管理和springjjdbc模板)
    javaee缓存技术 oscache ehcache
    Warning
    Math
    Test
    网络流24题-最小路径覆盖问题
    Wannafly summer camp Day3--Knight
  • 原文地址:https://www.cnblogs.com/Michael2397/p/7860193.html
Copyright © 2011-2022 走看看