java_6 线程创建的方式

一、创建线程的方法

1.继承Thread类

实现步骤:
(1)创建一个继承于Thread类的子类
(2)重写Thread类的run()方法【线程执行的操作声明在run()中】
(3)创建Thread类的子类的对象
(4)通过此对象调用start()方法【①启动线程②调用当前线程对象的run方法】
代码

//(1)创建一个继承于Thread类的子类
class MyThread1 extends Thread{
    public MyThread1(String name){
        super(name);
    }
        //(2)重写Thread类的run()方法
    @Override
    public void run() {
        System.out.println("第一种创建线程");
        }
    }
}
public class ThreadTest{
    public static void main(String[] args) {
        //(3)创建Thread类的子类的对象
        MyThread1 t1=new MyThread1();
        //(4)通过此对象调用start()方法
        t1.start();
        }
}

2.实现Runnable接口

实现步骤
(1)创建一个实现了Runnable接口的类
(2)该实现类 去实现Runnable中的抽象方法run()
(3)创建实现类的对象
(4)将此对象作为参数传递到Thread类的构造器中,创建 Thread类的对象
【Thread构造方法源码:public Thread(Runnable target)】
(5)通过Thread类的对象调用start()
代码

//1.创建一个实现了Runnable接口的类
class MyThread2 implements Runnable{
    @Override
    //2.实现类去实现Runnable中的抽象方法run()
    public void run() {
        System.out.println("第二种创建线程:实现Runnable接口");
            }
     }
         public class ThreadTest1 {
    public static void main(String[] args) {
        //3.创建实现类的对象
        MyThread2 m=new MyThread2();
        // 4.将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象
        Thread thread = new Thread(m);
        // 5.通过Thread类的对象调用start()
         thread.start();

二、说明

在前边说过start()方法的作用:
(1)启动线程
(2)调用当前线程的run()方法
那么问题来了:为什么在使用Runnable接口创建线程的方法中,明明是Thread类的对象调用的start(),为什么最终会是实现Runnable接口的类的run()方法被执行,而不是Thread类的run()方法被执行?
原因下次再说,要去上课了

原文地址:https://blog.51cto.com/14234228/2455946

时间: 2024-10-08 11:23:21

java_6 线程创建的方式的相关文章

java_10:线程创建的方式二

除了继承Thread类和实现Runnable接口两种创建线程的方式,JDK5.0还新增类两种线程创建方式: 新增方式一:实现Callable接口 好处:(1)与使用Runnable相比,Callable功能更强大些(2)相比run()方法,可以有返回值(3)方法可以抛出异常(4)支持泛型的返回值(5)需要借助FutureTask类,比如获取返回结果Future接口:1)可以对具体的Runnable\Callable任务的执行结果进行取消.查询是否完成.获取结果等2)FutureTask是Futu

MFC 线程创建方式

MFC 分UI线程和工作线程,一般现在的应用程序都是一个主UI线程和N个工作线程来完成工作.主UI线程获取到工作线程发送的信息来刷新界面. 不过因为工作需要,MFC有要维护的项目,因此就学习一下MFC创建UI线程,使用工作线程的方式. 1.UI线程,继承CWinThread类  1 class CAddDeviceApp : public CWinThread 2 { 3     DECLARE_DYNCREATE(CAddDeviceApp) 4 protected: 5     CAddDe

锁和多线程:线程创建3种方式(一)

线程 锁Synchronized 1.线程创建 2.线程安全 搞明白 线程 锁和多线程系列 1.线程创建 线程创建常见的三种方式: 继承Thread类 实现Runnable接口 实现Callable接口 第三种方式有异步调用效果,类似js中的ajax可以接收返回值,其余两种不能. package thread; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import

python 线程(创建2种方式,守护进程,锁,死锁,递归锁,GIL锁,其他方式)

###############总结############ 线程创建的2种方式(重点) 进程:资源分配单位    线程:cpu执行单位(实体) 线程的创建和销毁的开销特别小 线程之间资源共享,是同一个进程中的资源共享,会涉及到安全问题,所以需要加锁解决 锁:牺牲了效率,保证了数据安全(重点) 死锁现象:出现在嵌套的时候,双方互相抢对方已经拿到的锁,导致双方互相等待(重点) 递归锁: 解决了死锁现象(重点) rlock 首先本身就是个互斥锁,维护了一个计数器,每次acquire+1,release

实现线程同步的方式,以及区别

19.实现线程同步的方式,以及区别 为何要使用同步? java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),    将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用,    从而保证了该变量的唯一性和准确性.    同步的方式 1.同步方法    即有synchronized关键字修饰的方法.    由于java的每个对象都有一个内置锁,当用此关键字修饰方法时,    内置锁会保护整个方法.在调用该方法前,需

iOS-Senior10-多线程(子线程创建)

1.多线程概述 程序:由源代码生成的可执行应用.(eg:QQ.app) 进程:一个正在运行的程序可以看做一个进程.(eg:正在运行的QQ就是一个进程),进程用用独立运行所需的全部资源. 线程:程序中独立运行的代码段.(eg:接收QQ消息的代码) 一个进程是由一或多个线程组成.进程只负责资源的调度和分配,线程才是程序真正的执行单元,负责代码的执行. 1.1单线程 每个正在运行的程序(即进程),至少包含一个线程,这个线程就叫主线程. 主线程在程序启动时被创建,用于执行main函数. 只有一个主线程的

iOS开发——多线程OC篇&(二)线程创建

创建线程 一.创建和启动线程简单说明 一个NSThread对象就代表一条线程 创建.启动线程 (1) NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil]; [thread start]; // 线程一启动,就会在线程thread中执行self的run方法 主线程相关用法 + (NSThread *)mainThread; // 获得主线程 - (BOOL)isMa

操作系统:进程/线程同步的方式和机制,进程间通信

一.进程/线程间同步机制. 临界区.互斥区.事件.信号量四种方式临界区(Critical Section).互斥量(Mutex).信号量(Semaphore).事件(Event)的区别1.临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问.在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占.2.互斥量:采用互斥对象机

进程/线程同步的方式和机制,进程间通信

转自: http://www.cnblogs.com/memewry/archive/2012/08/22/2651696.html 一.进程/线程间同步机制. 临界区.互斥区.事件.信号量四种方式临界区(Critical Section).互斥量(Mutex).信号量(Semaphore).事件(Event)的区别1.临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问.在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后