zoukankan      html  css  js  c++  java
  • java启动线程时 extends与implements的一个差异

    java extends与implements在使用时的一个差异:

    Implements:

    public class ThreadImplementsTest  implements Runnable{
        
        public void loop(){
            String name=Thread.currentThread().getName();
            System.out.println(name+"====>进入loop()");
            for (int i = 0; i < 10; i++) {
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    System.out.println(e);
                }
            }
            System.out.println(name+"=============>离开Loop");
        }
        
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            ThreadSleepTest tst=new ThreadSleepTest();
            tst.run();
            
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            tst.loop();
        }
    
        public void run() {
            // TODO Auto-generated method stub
            loop();
        }
    }
    Output:

    main====>进入loop()
    main=============>离开Loop
    main====>进入loop()
    main=============>离开Loop

    可以看出直接在ThreadImplementsTest 中调用run方法是没有多线程的,原因是实现Runnable接口的类,只是说明具备了多线程的能力,要在多线程下运行,需要给一个环境(机会):

    可使用以下两种方法来调用:

    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    public class ThreadImplTest {
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            ThreadImplementsTest tit=new ThreadImplementsTest();
    //        new Thread(tit).start();
    //        tit.loop();
        //或
            //推荐使用此方式调用
            ExecutorService es=Executors.newCachedThreadPool(); 
            es.execute(tit);
            tit.loop();
        }
    }
    Output:
    //new Thread(tit).start();

    main====>进入loop()
    Thread-0====>进入loop()
    0
    0
    1
    1
    2
    2
    3
    3
    4
    4
    5
    5
    6
    6
    7
    7
    8
    8
    9
    9
    Thread-0=============>离开Loop
    main=============>离开Loop

    //        ExecutorService es=Executors.newCachedThreadPool(); 
    //        es.execute(tit);

    pool-1-thread-1====>进入loop()
    main====>进入loop()
    0
    0
    1
    1
    2
    2
    3
    3
    4
    4
    5
    5
    6
    6
    7
    7
    8
    8
    9
    9
    pool-1-thread-1=============>离开Loop
    main=============>离开Loop

    Extends:
    public class ThreadExtendsTest extends Thread {
        public void loop(){
            String name=Thread.currentThread().getName();
            System.out.println(name+"====>进入loop()");
            for (int i = 0; i < 10; i++) {
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    System.out.println(e);
                }
            }
            System.out.println(name+"=============>离开Loop");
        }
        
        public void run() {
            // TODO Auto-generated method stub
            loop();
        }
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            ThreadExtendsTest tet=new ThreadExtendsTest();
            tet.setName("Test Thread");
            tet.start();
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            tet.loop();
            
        }
    
    }
    Output:

    Test Thread====>进入loop()
    main====>进入loop()
    Test Thread=============>离开Loop
    main=============>离开Loop

     
     
     





     
     
     
     
  • 相关阅读:
    Python2 cmp() 函数
    Python round() 函数
    Python floor() 函数
    Python ceil() 函数
    Python abs() 函数
    Python oct() 函数
    Python ord() 函数
    Python hex() 函数
    Python2 unichr() 函数
    Android--------工具类StatusBarUtil实现完美状态栏
  • 原文地址:https://www.cnblogs.com/softidea/p/3402210.html
Copyright © 2011-2022 走看看