zoukankan      html  css  js  c++  java
  • Thread State 规格严格

    public class ThreadStateTest {

        public static void main(String[] args) {
            // surprising
            
    // Compile only iconst_1
            System.out.println(("hello123" == ("hel" + "lo" + 123)));
            Thread t = new Thread() {
                public void run() {
                    System.out.println("X: " + Thread.currentThread().getState());
                }
            };
            System.out.println(t.getState());
            t.start();
            t = new Thread() {
                private Object lock = new Object();

                public void run() {
                    synchronized (lock) {
                        try {
                            System.out.println("Getting into lock.wait()");
                            lock.wait(2000);
                        } catch (InterruptedException interruptedEx) {
                            interruptedEx.printStackTrace();
                        }
                    }
                }
            };
            t.start();
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
            }
            System.out.println(t.getState());
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
            }
            System.out.println(t.getState());
            final Object sharedLock = new Object();
            Thread anotherThreadHoldsTheLockForAWhile = new Thread() {
                public void run() {
                    synchronized (sharedLock) {
                        System.out.println(getName() + " holding sharedLock");

                        try {
                            Thread.sleep(50000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            };
            anotherThreadHoldsTheLockForAWhile.start();
            holdASec();
            System.out.println("XX: " + anotherThreadHoldsTheLockForAWhile.getState());
            t = new Thread() {
                public void run() {
                    synchronized (sharedLock) {
                        System.out.println("Got the lock");
                    }
                }
            };
            t.start();
            holdASec();
            System.out.println("YY: " + t.getState());
        }

        private static void holdASec() {
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    如题,上面是我按照下面网址参考写的测试代码,仅仅是测试。。。。

    http://www.jguru.com/faq/view.jsp?EID=1253344

    http://shihaiyang.iteye.com/blog/437902

    http://www.science.uva.nl/ict/ossdocs/java/tutorial/java/threads/states.html

    http://blog.csdn.net/westwin/article/details/4658602

    http://www.herongyang.com/Java-Tools/jstack-jhat-Java-Heap-Analysis-Tool.html

    http://stackoverflow.com/questions/7497793/understanding-java-lang-thread-state-waiting-parking

    -------------------------------------------------------------------------------

    Thread.sleep() sends the current thread into the "Not Runnable" state for some amount of time. The thread keeps the monitors it has aquired -- i.e. if the thread is currently in a synchronized block or method no other thread can enter this block or method. If another thread calls t.interrupt() it will wake up the sleeping thread.

    Note that sleep is a static method, which means that it always affects the current thread (the one that is executing the sleep method). A common mistake is to call t.sleep() where t is a different thread; even then, it is the current thread that will sleep, not the t thread.

    t.suspend() is deprecated. Using it is possible to halt a thread other than the current thread. A suspended thread keeps all its monitors and since this state is not interruptable it is deadlock prone.

    -------------------------------------------------------------------------------

  • 相关阅读:
    springboot(6)-热部署
    springboot(5)-文件上传
    ubuntu修改tomcat使用的jdk
    jstack使用
    HeapAnalyzer如何使用
    查看linux下tomcat使用的jdk版本
    ubuntu-tomcat安装目录
    vi命令
    211java-jdk安装记录
    linux的java安装目录
  • 原文地址:https://www.cnblogs.com/diyunpeng/p/2446382.html
Copyright © 2011-2022 走看看