java多线程的创建方式

根据Thread类中的run方法

public void run() {

if (this.target == null)

return;

this.target.run();

}

可以知道运行多线程代码有两种方式,一种是运行Thread类run方法中的代码,一种是运行target中的run代码。

方法一:运行Thread类run方法中的代码

Thread thread1=new Thread(){

@Override

public void run() {

while(true){

try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println(Thread.currentThread().getName());

}

}

};

thread1.start();

方法二:运行target中的run代码

target是何物,我们来追踪一下:

private Runnable target;

他是Thread类的一个Runnable参数,那么他是如何传参进来的呢?

public Thread(Runnable paramRunnable) {

init(null, paramRunnable, "Thread-" + nextThreadNum(), 0L);

}

通过Thread类构造方法传Runnable进来,再调用init方法

private void init(ThreadGroup paramThreadGroup, Runnable paramRunnable,

String paramString, long paramLong) {

init(paramThreadGroup, paramRunnable, paramString, paramLong, null);

}

这是Thread类的一个私有初始化方法

再调用方法

private void init(ThreadGroup paramThreadGroup, Runnable paramRunnable,

String paramString, long paramLong,

AccessControlContext paramAccessControlContext) {

}

在这个方法里有步骤

this.target = paramRunnable;

从而给target赋值。

改方法创建改多线程方式:

Thread thread2=new Thread(new Runnable(){

@Override

public void run() {

while(true){

try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println(Thread.currentThread().getName());

}

}

});

thread2.start();

那么问题又来了,如果同时存在方法一和方法二的情况,如下代码:

Thread thread3=new Thread(new Runnable(){

@Override

public void run() {

while(true){

try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println("run:"+Thread.currentThread().getName());

}

}

}){

public void run() {

while(true){

try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println("thread:"+Thread.currentThread().getName());

}

}

};

thread3.start();

那么该执行哪个代码呢?根据java编程思想,我们知道方法一是覆写了父类的run方法,方法二是父类固有的,所以代码在执行的时候是选择执行子类的run方法,如果子类run方法不存在,才去父类寻找runnable的run方法

时间: 2024-10-06 00:28:52

java多线程的创建方式的相关文章

Java多线程(1) 创建

一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下以下这张较为经典的图: Java线程具有五中基本状态 新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread(); 就绪状态(Runnable):当调用线程对象的start()方法(t.start();).线程即进入就绪状态.处于就绪状态的线程,仅仅是说明此线程已经做好了准备.随时等待CPU调度运行.并非说运行了t.start()此线程马上就会运行: 执行状态(Runn

JAVA学习第二十三课(多线程(二))- (多线程的创建方式二 :实现Runnable接口(常用))

当一个类有父亲,但是其中的功能还希望实现线程,那么就不能采用继承Thread的方式创建线程 那么就可以通过接口的方式完成 准备扩展Demo类的功能,让其中的内容可以作为线程的任务执行 实现Runnable接口,Runnable接口中只有一个方法run 一.创建线程的第二种方法 Runnable的出现仅仅是将线程的任务进行了对象的封装 /* * 创建线程的第二种方法 * 1.定义类实现Runnable接口 * 2.覆盖接口中的fun方法,将线程的任务代码封装到run方法中 * 3.通过Thread

java多线程3种方式

Java多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多线程.其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的. 1.继承Thread类实现多线程继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法.start()方法

多线程的创建方式

一:进程与线程     进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程.(进程是资源分配的最小单位) 线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小.(线程是cpu调度的最小单位) 线程和进程一样分为五个阶段:创建.就绪.运行.阻塞.终止. 多进程是指操作系统能同时运行多个任务(程序). 多线程是指在同一程序中有多个顺序流在执行. 2:实现多线程有三种方法:一种是继续Thread类,另外

Java多线程的创建(二)

前言: 虽然java的API中说创建多线程的方式只有两种(There are two ways to create a new thread of execution),分别是继承Thread类创建和实现Runnable接口创建,在上一篇博文中演示了这两种,详见,但是JDK5.0以后新增了两种,分别是实现Callable接口创建和使用线程池创建,本次就演示后两种创建方式并分析其特性. 实现Runnable接口创建多线程 创建步骤: 1.创建一个实现Callable接口的类. 2.重写call()

JAVA单线程以及java多线程的实现方式

1.java单线程的实现 public class SingletonThread { @SuppressWarnings("static-access") public static void main(String[] args) { Thread t =Thread.currentThread(); t.setName("单例线程"); System.out.println(t.getName()+" 正在运行"); for(int i=0

java——多线程的实现方式、两种办法解决线程赛跑

多线程的实现方式:demo1.demo2 demo1:继承Thread类,重写run()方法 package thread_test; public class ThreadDemo1 extends Thread { ThreadDemo1(){ } ThreadDemo1(String szName){ super(szName); } //重载run函数 public void run() { for(int count = 1 , row = 1 ; row < 10 ; row ++

JAVA学习第二十二课(多线程(二))- (多线程的创建方式一 :继承Thread类)

线程是程序中的执行线程.Java 虚拟机允许应用程序并发地运行多个执行线程. 创建新执行线程有两种方法. 一种方法是将类声明为 Thread 的子类.该子类应重写Thread 类的run 方法.另一种方法是声明实现 Runnable 接口的类.该类然后实现run 方法. 创建线程方式一:继承Thread类 一.创建线程的步骤: 1.定义一个类继承Thread类 2.覆盖Thread中的run()方法 3.直接创建Thread类子类的对象 4.调用start方法开启线程,并调用线程的任务run方法

多线程的创建方式---继承Thread和实现Runnable

继承Thread类创建多线程 1 package cn.ftf.thread; 2 /** 3 * 多线程实现方式一 继承Thread实现多线程,继承Thread,重写run方法 4 * @author 房廷飞 5 * 6 */ 7 public class StartThread extends Thread{ //对象继承Thread 8 public static void main(String[] args) { 9 StartThread st=new StartThread();