Java多线程学习笔记1

多线程学习笔记

本人水平有限,有错误之处,还请批评指正

1.关于进程与线程的知识

进程是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间。
线程是进程的一个执行路径,打个比方,某一件事情相当于进程,它需要有好几个人去做,每个人做的那个流程就相当于线程了。因为是一件事情需要好几个人去做,所以这几个人就共享这件事情的信息,也就是线程共享一个内存时间。但是每个线程需要有自己的栈空间来做事。
线程之间可以切换,并发执行,一个进程至少有一个线程。

2.线程调度的方式

这个可以这么理解,由于CPU 是只有一个,所以多线程实际上就是为了使CPU不断干活而设计出来的,CPU执行不同线程相当于CPU变换角色去做事。线程的调度就是处理CPU何时切换角色做事。
线程的调度方式有两种:
一种是分时调度,就是每个角色轮流按照固定的时间来做事(每个线程轮流执行)。
第二种是Java采用的抢占式调度。就是跟据线程的优先级来调度,优先级高者先执行,优先级相同就会抽签决定哪个被执行。

3.同步与异步,并发与并行的区别

同步是排队执行线程,效率低但安全,因为CPU在等待的过程中没干活;
异步是同时去做,效率高但不安全。
并发:两个或多个事件在同一时间段发生(比如一个CPU在这个时间段内执行2个不同线程)
并行:两个或多个事件在同一时刻发生(比如2个CPU在同一时刻分别执行1个不同线程)

4.实现多线程的方式
1.继承Thread类,并重写run方法
public class MyThread extends Thread{
	@Override
	public void run(){
	//此处代码省略
	}
}
2.实现Runnable接口(推荐)
public class MyThread implements Runnable{
	@Override
    public void run(){
       //此处代码省略
    }
}

与继承Thread类相比,实现Runnable接口具有几点优势
1.因为是实现接口,所以避免了单继承的局限性
2.任务和线程是分离的,提高了程序的健壮性
3.通过创建任务,然后给线程分配的方式来实现的多线程,更适合多个线程同时执行相同任务的情形
4.线程池接受的是Runnable类型的任务,而不是Thread类型的任务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值