zoukankan      html  css  js  c++  java
  • Thread与Runnable

    概要


    1.Thread与Runnable的简单介绍

    2.Thread与Runnable的区别

    3.Thread与Runnable举例

    Thread与Runnable的简介

    Runnable就是一个接口,实现接口就需要实现run方法;

    public interface Runnable {
        /**
         * When an object implementing interface <code>Runnable</code> is used
         * to create a thread, starting the thread causes the object's
         * <code>run</code> method to be called in that separately executing
         * thread.
         * <p>
         * The general contract of the method <code>run</code> is that it may
         * take any action whatsoever.
         *
         * @see     java.lang.Thread#run()
         */
        public abstract void run();
    }

    Thread其实也是实现了Runnable接口,如源码所示,在继承Thread时,需要重写run方法。

    public
    class Thread implements Runnable {
    public void run() {  //实现的是Runnable接口
            if (target != null) {
                target.run();  //此处的target是Runnable类型
            }
        }

    Thread与Runnable的区别

    1.二者都是多线程的实现方式;

    2.Thread是类,Runnable是接口,一个类可以实现多个接口,所以Runnable具有更好的扩展性。

    3.Runnable能够实现对象的共享,比如说基于某一个Runnable对象,多个线程可以同时共享Runnable对象上的资源。后面代码后说明。

    Thread与Runnable举例

    1.Thread,比如实现一个ThreadTest

    public class ThreadTest extends Thread{
    
        private int ticket=5;
        public void run(){
    
            for(int i=0;i<10;i++){
    
                if(this.ticket>0){
    
                    System.out.println(this.currentThread().getName()+" sell "+this.ticket--);
                }
            }
        }
    
        public static void main(String[] args){
    
            ThreadTest test1=new ThreadTest();
            ThreadTest test2=new ThreadTest();
            ThreadTest test3=new ThreadTest();
            test1.start();
            test2.start();
            test3.start();
        }

    这样的输出结果分别为三个线程分别卖出5张票:创建了三个ThreadTest的实例,每个实例调用start来启动线程来调用run方法。

    Thread-0 sell 5
    Thread-2 sell 5
    Thread-1 sell 5
    Thread-2 sell 4
    Thread-0 sell 4
    Thread-2 sell 3
    Thread-1 sell 4
    Thread-2 sell 2
    Thread-2 sell 1
    Thread-0 sell 3
    Thread-0 sell 2
    Thread-0 sell 1
    Thread-1 sell 3
    Thread-1 sell 2
    Thread-1 sell 1

    2.Runnable的示例

    public class RunnableTest implements Runnable {
        private int ticket=5;
        @Override
        public void run() {
    
            for(int i=0;i<10;i++){
    
                if(this.ticket>0){
    
                    System.out.println(Thread.currentThread().getName()+" sell "+this.ticket--);
                }
            }
        }
    
        public static void main(String[] args){
    
            RunnableTest runnableTest=new RunnableTest();
            Thread test1=new Thread(runnableTest);
            Thread test2=new Thread(runnableTest);
            Thread test3=new Thread(runnableTest);
            test1.start();
            test2.start();
            test3.start();
    
        }
    }

    创建三个Thread实例,但是用的一个Runnable对象,所有输出结果为三个线程卖5张票:

    Thread-0 sell 4
    Thread-0 sell 2
    Thread-0 sell 1
    Thread-2 sell 3
    Thread-1 sell 5

     

  • 相关阅读:
    Const is faster than static const
    创新点子:博客图文混编工具
    Performance Optimization Articles
    Notes on distributed rendering
    Tested distancebased sorting and axisbased sorting
    How do exes/dlls generated with the /platform:x switch interact?
    SQL中判断字符串中包含字符的方法
    C#获取指定IP的主机名
    将ArrayList设为wpf的数据源
    WPF的DataGrid中DataGridHyperlinkColumn的用法
  • 原文地址:https://www.cnblogs.com/dpains/p/7488657.html
Copyright © 2011-2022 走看看