Java多线程笔记

第一节:进程与线程的基础概念
一:进程概念
1.程序(任务)的 执行过程。(程序指的就是 应用程序——例如QQ、播放器等)
注意:进程是 动态性的,放在磁盘文件中的文件并不是进程,只有在 运行状态的才可称之为进程。
三大状态:加载、运行、结束
程序:就是用代码操作数据。
2.进程持有 资源(共享内存,共享文件)和线程。
注意:进程是资源和线程的载体。
3、特点
A:进程是系统运行程序的基本单位。
B:每一个进程都有自己独立的一块内存空间,一组系统资源。(系统资源如一些文件等)
C:每一个进程内部数据和状态都是完全独立的。

二: 线程概念——线程是一个程序的多个执行路径
1、线程是系统中最小的执行单元
2、同一进程中有多个线程(运行程序就是进程)
3、线程共享进程的资源

4、线程的交互:多个线程需要 正确的交互才能进行工作。
注意:交互方式有 互斥同步两种。
5、使用多线程的 目的:减少了程序执行的时间
——
——
第二节:创建线程
一: java语言中线程的支持
1、java对线程的 支持体现在两个:class Thread(类) 和interface Runnable(接口),在java.lang的包
2、class Thread 和interface Runnable 共通的方法是:public void run()为我们提供 线程实际工作执行的代码
3、Thread常用方法
join:使当前正在执行的线程暂停执行, 等待调用该方法的线程结束后,再继续执行本线程。
yield():当前线程让出CUP,再次交给虚拟机调用,给和自己相同或更高优先级的线程,分配CUP资源。( 不过也有可能再分配到自己)
4、重载的几个形式
A:没有参数,指明了其它的线程一定要等待正在执行的线程执行完毕之后,都会获得运行的机会
B:nanos是要把精确度改变,可改成纳秒
5、线程的启动,不能用run方法启动,不然就和普通的对象没区别了。

二:线程的创建和启动
1、两种方法创建线程
A:通过继承 Thread 类
class MyThread extends Thread{};//继承于线程类
Thread myThread = new MyThread();
myThread.start();//线程启动后,会执行run()方法

B:通过实现Runnable接口
class MyRunnable implements Runnable{}//创建一个实现类
Thread myRunnable = new Thread(new MyRunnable);//将这个类的实现类对象传入
myRunnable.start();

C:总结
1、若实现接口通过Thread.currentThread().getName()方法获取当前线程名称,继承Thread则getName()方法获取当前线程名称。
2、在同一时间,同一处理器或同一个核只能运行一条线程,当一条线程休眠之后,另一条线程才获得了我们处理器的时间
3、在线程的start()方法被调用后,线程启动,JVM会自动调用线程的run()方法来执行任务,run方法会出现在 独立的执行空间最上面。线程执行完了,线程也就终止了。
4、优先级高的线程,是 有可能优先占用CPU,而不是一定。

2、Thread类的方法
A:.getName() 返回线程的名字
B:.setName(String Name) 改变线程的名字
C:.start() 使该线程开始执行,Java 虚拟机调用该线程的 run 方法。
D:.sleep(long millis) 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。线程不丢失任何监视器的所属权。
E:.currentThreat() 返回对当前正在执行的线程对象的引用。( 静态方法,返回Thread类型)
——
——
第三节:线程同步
一:并发性——多线程的缺点
1、并发性问题会引发 竞争状态,竞争状态会引发 数据损毁
2、并发性的发生,来源于,如果两个 不同执行空间(线程)上的方法,都对同一个对象执行 读改命令。

二:同步化
1、因为并发性的问题,我们需要给一些方法 加上锁
2、加上synchronized关键字,代表方法被同步化,在单一线程执行完, 整个方法前,其他线程无法进入该方法。
3、对象就算有多个同步化方法,但也还是只有一个锁,一把钥匙。
所以,如果一旦有某个线程 进入该对象的同步化方法,在解锁前, 其他线程就无法进入该对象上的任何同步化方法。(因为一个对象只有一把钥匙)
注意:对象的锁,只会在同步化方法上起作用。(锁不是在方法上,而是在 对象上!
4、如果对象有 两个同步化方法,那么就代表两个线程 无法进入同一同步化方法也无法进入不同的同步化方法。(想要进入,只有等单一线程执行完同步化发那个发,将对象的钥匙归还
注意:使用同步化方法,一般是该方法,有操作对象成员变量的操作。
三:死锁
1、发生情形是,两个线程互相持有对方等待的东西,也就是钥匙。
2、因为方法的同步化, 线程如果没有钥匙无法进入
3、只要有两个线程和两个对象,就可以引发死锁。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值