Java语言:多线程概述以及线程的创建

本文深入解析Java中线程的概念,对比进程的区别,详细讲解线程的创建方式,包括通过继承Thread类和实现Runnable接口创建线程的具体步骤,并提供代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

概述

线程的概述

Thread类和Runnable接口介绍

线程的创建

通过Thread类创建线程

通过Runnable接口创建线程


概述

线程的概述

 

要讲什么是线程,那么就要先讲什么是进程

进程的概念如下

 

 

乍一看,好像还是没有明白啥是进程

又到了举栗子时间

比如我们平时在敲代码的时候,可能有的人会边听歌边敲代码

那么我们敲代码的编辑器和听音乐的软件就是两个进程

我们可以打开任务管理器,如下

 

 

我们会看到上面的图片中红色框框住的地方写的就是进程,这样懂了吧!

那什么是线程呢?

线程是比进程还要小的单位,一个进程可以包含很多个线程

说到这里我们要讲到时间片这个东西

CPU运行期间会分成很多的时间片,如下图

我们能够边敲代码,边听音乐的原因也是因为这个原因

 

 

程序在运行期间会去抢占时间片,由于时间片短

所以让用户从自身的角度出发感觉所有的程序在同时执行,其实并没有

这里采用了时间片轮转的方式,让你有了这种错觉

说是轮转,但是CPU的时间片的分配是随机的

 

Thread类和Runnable接口介绍

现在要讲到两个非常重要的东西,一个是Thread类,一个是Runnable接口

它们和线程创建的关系如下

下面介绍Thread和Runnable接口

 

 

在这里要说一个东西,就是在重写run方法之后

如果使用线程调用start方法,那么会自动调用重写之后的run方法

我查了一下资料,网上说源码中调用的start0方法是会通过虚拟机调用run方法

但是我发现start0方法没有方法体,所以也不太清楚(功力不够啊!惭愧)

 

 

这里还有一个东西记一下,那就是查看API文档的时候,发现这个东西

如果方法后面标上了Deprecated的就是过时的方法,不推荐使用,在以后可能会从JDK中删除的方法

 

线程的创建

通过Thread类创建线程

 

通过Thread类创建线程的方法就是对Thread类进行继承,然后重写里面的run方法

直接上代码吧!

 

public class NewThread extends Thread {
	public NewThread(String name) {
		super(name);
	}
	
	@Override
	public void run() {
		// TODO Auto-generated method stub
		for (int i = 0; i < 10; i++) {
			System.out.println(this.getName() + "运行" + i);
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//第一步:创建线程
		NewThread n=new NewThread("线程1");
		NewThread m=new NewThread("线程2");
		
		//第二步:跑起来
		n.start();
		m.start();
	}

}

运行结果

从运行结果可以看出CPU分配时间片的方式是随机的

 

通过Runnable接口创建线程

 

先介绍一下为什么要使用Runnable接口实现线程吧!

因为在Java中是不支持多继承的,如果一个类继承了另一个类

但是同时想要创建线程,那么就实现不了

其实通过Runnable接口实现线程也要通过Thread这个类,要将实现Runable接口的类的实例作为参数放入Thread构造方法中

 

直接上代码吧!

public class RunnableThread implements Runnable{

	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int i=0;i<10;i++) {
			System.out.println(Thread.currentThread().getName() + "运行" + i);
		}
	}
	public static void main(String[] args) {
		//第零步实现Runnable接口
		//第一步创建实现Runnable接口对象
		RunnableThread rt=new RunnableThread();
		//第二步将接口对象放入Thread构造方法中
		Thread t=new Thread(rt);
		//第三步调用start方法
		t.start();
	}
	
}

从运行结果可以看出如果名字没有取名字,那么系统会自动给你命名

 

这里有一个疑问?

之前视频中老师的代码是这样的

你会发现一个java文件会有两个类

我查了一下资料,确实是可以这样写

但是不知道这具体是什么语法现象,找了半天没找到

文章在这里

https://www.cnblogs.com/weiweiyao/p/4303054.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值