(42)继承Thread类创建线程

一进程、线程概念:

①进程:是正在执行中的程序

         每一个进程执行都有一个执行顺序。该顺序是一个执行路径,或者叫控制单元

线程:是进程中的一个独立的控制单元

          线程控制着进程而定执行

一个进程中至少有一个线程

②jvm启动时会有一个进程java.exe

该进程中至少一个线程负责java程序的执行,而且这个线程运行的代码在main方法中,该线程称为主线程。

扩展:其实更细节说jvm,jvm启动不止一个线程,还有垃圾回收机制的线程

二、如何在自定义的代码中,自定义一个线程呢?

通过对API的查找,java已经提供了对这类事物的描述,就是Thread类

创建线程的第一种方法:继承Thread类

步骤:

1.定义类继承Thread

2.复写Thread类中的run方法

3.创建线程对象,调用线程的start方法

   该方法作用①启动线程②调用run方法



public class Demo extends Thread{
	public void run() {
		for(int i=0;i<10;i++) {
		System.out.println("run demo");
	    }
	}
	
}
public class ThreadDemo {

	public static void main(String[] args) {
		Demo d=new Demo();//创建一个对象,就是创建一个线程
		d.start();//开启线程并知心该线程的run方法
                //d.run(); 仅仅是对象调用方法。而线程创建了,没有运行         
               for(int i=0;i<10;i++) {
			System.out.println("run HelloWorld");
		    }
	}

}








输出:交替执行,每次执行结果每次都不同

因为多个线程都在获得cpu的执行使用权。cpu执行到谁,谁就运行。

明确一点,在某个时刻,只能有一个程序在运行(单核)

CPU在做着快速的切换,以达到看到看上去是同时运行的效果,我们可以形象的把多线程的运行行为在互相抢夺cpu的执行权。

这就是多线程的一个特性:随机性。谁抢到谁执行;至于多长时间,cpu说了算


图示说明:

main处是主线程,通过创建线程对象,启动run方法,就有了一个新的线程执行路径,就目前情况而言,就有两个执行路径在同时执行。

多个线程抢占CPU资源,每次只能一个线程执行

main主线程可能先执行完,d线程没执行完,这个进程不会结束,直到所有的线程全都执行完,这个进程才结束

当双核出现后,内存出现瓶颈



为什么要覆盖run方法呢?

Thread类用于描述线程。该类定义了一个功能,用于存储线程要运行的代码。该存储功能就是run方法。

也就是说,Thread类中的run方法,用于存储线程要运行的代码。

主线程中的代码放在main中,自定义线程的代码放到run方法中

为什么继承Thread类,复写run方法?

目的:将自定义的代码存储在run方法中,让线程运行。

(如果就创建Thread类对象,调用start方法,start默认调用run方法,run中没代码,什么都执行不了。而自定义线程的目的就是要执行指定的代码,父类Thread中已经定义了run方法,所以继承复写即可)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值