Java多线程

1.什么是线程以及多线程与进程的区别


    在现代操作在运行一个程序时,会为其创建一个进程。操作系统中调度的最小单位元是线程,也叫轻量级进程,在一个进程里可以创建多个线程,这些线程都拥有各自的计数器,堆栈和局部变量等属性,并且能够访问共享的内存变量。处理器在这些线程上高速切换,让使用者感觉到这些线程在同时执行。因此我们可以这样理解:
进程: 正在运行的程序,是系统进行资源分配和调用的独立单位。 每一个进程都有它自己的内存空间和系统资源。
线程: 是进程中的单个顺序控制流,是一条执行路径 一个进程如果只有一条执行路径,则称为单线程程序。 一个进程如果有多条执行路径,则称为多线程程序。

2.多线程的创建

创建多线程有三种方法,一种是继承Thread类重写run方法,另一种是实现Runnable接口重写run方法。还有一种是实现Callable接口,下面我们分别给出代码示例,

继承Thread类重写run方法

package com.test;
/**
 1. @decrition 继承Thread实现线程
 */
public class Test extends Thread{
	/**
	 * 重写run方法
	 */
	@Override
	public void run() {
		System.out.println("I'm a thread that extends Thread!");
	}
}

实现Runnable接口重写run方法:

package com.test;
/**
 2. @decrition 实现Runnable接口重写run方法
 */
public class RunnableTest implements Runnable{
	/**
	 * 实现run方法
	 */
	@Override
	public void run() {
		System.out.println("I'm a thread that implements Runnable !");
	}
}

3.多线程的启动

package com.test;
public class MainTest {
	
	public static void main(String[] args) {
		//继承Thread启动的方法
		Test t1=new Test();
		t1.start();//启动线程
		
		
		//实现Runnable启动线程的方法
		RunnableTest r = new RunnableTest();
		Thread t2 =new Thread(r);
		t2.start();//启动线程
	}
}

运行结果

I'm a thread that extends Thread!
I'm a thread that implements Runnable !

4.线程生命周期与线程状态

新建状态(New):新创建了一个线程对象。
就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。
运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。
阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种:

等待阻塞(WAITING):运行的线程执行wait()方法,JVM会把该线程放入等待池中。

同步阻塞(Blocked):运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中。

超时阻塞(TIME_WAITING):运行的线程执行sleep(long)或join(long)方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。

死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值