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()方法。

原文地址:https://www.cnblogs.com/csyh/p/12257542.html

时间: 2024-11-10 23:16:43

Java多线程:实现Runnable接口创建线程方式详解的相关文章

Java总结(十)—实现Runnable接口创建线程,线程安全同步,死锁(哲学家进餐问题),读写锁

一.通过实现Runnable接口创建线程 定义实现Runnable接口的类 (1)Runnable接口中只有一个方法public void run();用来定义线程运行体: class MyRun implements Runnable(){ public void run(){ 线程执行的具体代码 } } (2)创建线程的实例的时候将这个类的实例作为参数传递到线程实例内部.然后再启动: Thread thread=new Thread(new MyRun()); Thread.start();

Java知多少(58)线程Runnable接口和Thread类详解

大多数情况,通过实例化一个Thread对象来创建一个线程.Java定义了两种方式: 实现Runnable 接口: 可以继承Thread类. 下面的两小节依次介绍了每一种方式. 实现Runnable接口 创建线程的最简单的方法就是创建一个实现Runnable 接口的类.Runnable抽象了一个执行代码单元.你可以通过实现Runnable接口的方法创建每一个对象的线程.为实现Runnable 接口,一个类仅需实现一个run()的简单方法,该方法声明如下:    public void run( )

java多线程模式ThreadLocal原理简述及其使用详解

原创整理不易,转载请注明出处:java多线程模式ThreadLocal原理简述及其使用详解 代码下载地址:http://www.zuidaima.com/share/1781557457128448.htm ThreadLocal是为了使每个线程保存一份属于自己的数据. 先看一个使用ThreadLocal的实例. package com.zuidaima.aop.framework; import com.zuidaima.core.NamedThreadLocal; public abstra

“全栈2019”Java多线程第十九章:死锁详解

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多线程第十九章:死锁详解 下一章 "全栈2019"Java多线程第二十章:同步方法产生死锁的例子 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组&q

java基础——实现Callable接口创建线程

package callable; /* 创建线程方式三:实现Callable接口 1.创建一个实现Callable的实现类 2.实现call方法,将此线程需要执行的操作声明在次方法中 3.创建Callable接口实现类的对象 4.将此对象作为参数丢到FutureTask构造器中,创建FutureTask对象 5.将FutureTask对象作为对象传递到Thread构造器中,创建Thread对象,start() 6.如果需要方法的返回值,则用futureTask.get()方法去获取 理解: 1

java多线程--实现Runnable接口方式

因为java类只能继承一个类可以实现多个接口的特性,所以一般情况下不推荐使用继承Thread类实现多线程,下面是实现Runnable接口方式的简单多线程代码 package text; /** * 多线程 * @author admin * */ public class Threads { public static void main(String[] args){ Thread_1 t1=new Thread_1(); Thread thread1 =new Thread(t1); thr

java多线程--实现Runnable接口

package unit8; import java.applet.Applet; import java.awt.Label; import java.awt.TextField; public class TestRunnable extends Applet implements Runnable{ Label prompt1 = new Label("The first thread:"); Label prompt2 = new Label ("The second

java 第55节 实现Runnable接口创建线程

2016-07-01 package com.java1995; public class RunnableDemo { public static void main(String[] args) { MyThread mt=new MyThread(); Thread t=new Thread(mt); t.start(); for(int i=0;i<10;i++){ try { Thread.sleep(100); } catch (InterruptedException e) { /

Java Web学习(三)数据加密方式详解

本文借鉴:chengbinbbs,FKNIGHT0X,Central-Perk(特此感谢!) 对称加密 定义:加密和解密使用相同密钥的算法. 常见的有DES.3DES.AES.PBE等加密算法,这几种算法安全性依次是逐渐增强的. DES加密 特点:简便.密钥长度比较短. /** * DES加密介绍 * DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法.DES加密算法出自IBM的研究, * 后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用5