黑马程序员--04.多线程--03.【创建线程两种方法的对比】【多线程卖票案例设计】

这篇博客详细介绍了Java中创建线程的两种方法:通过实现Runnable接口和继承Thread类,并通过多线程卖票案例进行深入解析。对比了两种方法的优缺点,强调了数据共享和线程同步的重要性。
摘要由CSDN通过智能技术生成

多线程--3

创建线程两种方法的对比

多线程卖票案例设计

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

1.    创建线程的两种方法的对比

1). Runnable接口

(1). Runnable接口的基础知识

[1]. Runnable接口所在的位置

Runnable接口位于java.lang包中

[2]. Runnable接口的源码声明

public interface Runnable{
   publicabstract void run();
}

[3]. Runnable接口的含义

Runnable接口应该被需要由线程来执行的实例对象所属的类来实现。

(2). Runnable接口中唯一的抽象方法

[1]. 抽象方法声明

public abstractvoid run();

[2]. run方法的作用

{1}. 当实现了Runnable接口的类实例被用来创建线程的时候(即Runnable实例被传入Thread的构造方法中的时候),开启线程(即调用线程的start()方法)会引发对象的run方法被正在被CPU运行的线程调用

{2}. 实际上是把自定义线程要运行的线程代码存放到Runnable接口实现类的run()中。

(3). Thread类和Runnable接口的关系

[1]. Thread类所实现的接口就是Runnable接口

[2]. 源码:public class Thread implements Runnable { //...}

因此Thread类中run方法就是实现的Runnable接口中的run方法。

【MyEclipse验证】


左上角的白色的三角号就代表着这个方法是一个实现了某个接口中声明的方法。

[3]. Thread类中的Runnable类型的成员属性

public class Thread implements Runnable {
    //...
/* What will berun. */
private Runnable target;
//...
}

public class Thread implements Runnable {

    //...

/* What will berun. */

private Runnable target;

//...

}

这个Runnable类成员属性就用于在Thread类构造方法中接收用户传进来的自定义的Runnable实现子类的对象

2). Thread类的构造方法 (常用)

(1). Thread类构造方法中共同调用的初始化方法init (简单了解)

[1]. Thread类的初始化init方法的声明

private void init(ThreadGroup g, Runnabletarget, String name, long stackSize);

[2]. 参数含义

{1}.ThreadGroup:线程组类 表示一组线程 (这个类不细说)

{2}.Runnable target:实际接收到实现run方法的(包含了自定义线程需要运行的代码)实现类的对象。

target的含义:就是Thread这个线程要运行的目标代码全部在Runnable的实现子类的run方法中了。所以Thread类中Runnable引用名取名为target。

{3}. String name:表示为线程取得名字

{4}. long stackSize:为要新建的线程分配的栈内存的大小。

注意】init方法是Thread类所有构造方法调用的基础

(1). 空参构造方法

[1]. 方法原型:publicThread();

[2]. 功能:调用本地OS资源创建一个线程对象

[3]. 源码:(实际上调用Thread的init方法)

public Thread() {
    init(null, null, "Thread-" + nextThreadNum(), 0);
}
解释

{1}. Runnable位置传入了null。这样Thread类中的Runnable类型的成员变量target的指向了null。同时在Thread类中重写的run方法如下:

Thread类中的run方法的源码:

public void run() {
        if (target != null) {
             target.run();// target 是Runnable接口的引用变量
        }
}
注意Thread中的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值