zoukankan      html  css  js  c++  java
  • Java多线程:实现Runnable接口创建线程方式详解

    先看例子:###

    /**实现Runnable接口创建线程步骤:
     * 1、创建一个实现Runnable接口的类
     * 2、重写Runnable类中抽象的run()方法
     * 3、创建实现类的对象
     * 4、声明Thread类,同时将实现类对象作为参数传递
     * 5、用Thread类的对象调用start()
     */
    //例子:多线程售票(暂未安全同步)
    class MyThread implements Runnable{
        private int num = 100;
        public void run(){
            while (true){
                System.out.println(Thread.currentThread().getName()+"票号:"+num--);
                if(num == 0)
                    break;
            }
        }
    }
    public class ThreadTest2 {
        public static void main(String[] args) {
            //m相当于是提供了线程所要执行的run(),所以可以供不同线程调用
            MyThread myThread = new MyThread();
    
            //将Runnable实现类的对象传递给Thread类中的Runnable类型的属性,由此调实现用
            Thread t = new Thread(myThread);
            Thread t1 = new Thread(myThread);
            Thread t2 = new Thread(myThread);
            //设置线程名
            t.setName("窗口1:");
            t1.setName("窗口2:");
            t2.setName("窗口3:");
            //通过调用start执行myThread对象的run(),实现三个线程共用一个方法,但是对象始终只有一个,记录票数的子类也只有一个
            t.start();
            t1.start();
            t2.start();
        }
    }
    

    解析:

    通过源码发现Thread类也实现了Runnable接口,通过所以此创建实例的过程是一个Runnable的实现类对象(myThread),传递给另一个Runnable实现类对象(t、t1、t2)的过程,而Thread类中还定义了个Runnable类型的属性,用于配合接收Thread类的带参构造器传递过来的Runnable类型的对象,现在对象有了,要调用什么姿势还不是拍拍屁股的事情?(实际是Thread类中的run()判断出有Runnable对象传递进来了,就通过该对象调用run())

    补充:忽略安全同步问题,例子实现了多线程售票,可以看出start()方法负责开启线程并调用负责线程执行内容的run()方法。

  • 相关阅读:
    $prufer$序列
    倍增
    二分
    英语词汇速查表
    ACM模拟赛
    Trie树
    关于军训的模拟赛-R2
    树上差分
    列队
    斜率优化dp
  • 原文地址:https://www.cnblogs.com/csyh/p/12257542.html
Copyright © 2011-2022 走看看