线程(基础)

一 线程相关概念

1. 程序:

是为完成特定任务,用某种语言编写的一组指令的集合.

2. 进程

1. 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存空间
2. 进程是程序的一次执行过程,或是正在运行的一个程序.是动态过程:有他自身产生,存在和消亡的过程.

3. 其他相关概念

3. 单线程:同一个时刻,只允许执行一个线程
4. 多线程:同一个时刻,可以执行多个线程
5. 并发:同一个时刻,多个任务交替执行,造成一种"貌似同时"的错觉.简单地说,单核CPU实现的多任务就是并发
6. 并行:同一个时刻,多个任务同时执行,多核CPU可以实现并行

二 线程基本使用

1. 创建线程的两种方式

1. 继承Thread类,重写run()方法
2. 实现Runnable接口,没有返回值
3. 实现Callable接口,有返回值,可以抛出异常
4. 线程池创建:ThreadPoolExecutor或者Executors.newFixedThreadPool创建一个固定大小的线程池,可控制并发的线程数,超出的线程在队列中等待。

2. 线程状态

1. new Thread() 线程对象一旦创建就进入到了新生状态	NEW 
2. start()方法被调用,线程立即进入就绪状态,但不意味着立即调度执行	TIMED_WAITING
3. sleep(),wait()方法被调用或同步锁定时,线程由运行进入阻塞状态,就是代码不往下执行,阻塞事件解除后,重新进入就绪状态,等待cpu调度执行		WAITING
4. 进入运行状态,线程才真正执行线程体的代码块	RUNNABLE
5. dead:线程中断或者结束,一旦进入死亡状态,就不能再次启动	TERMINATED

3. 线程常用方法

1. setPriority(int newPriority):更改线程的优先级
2. sleep(long millis):在指定的毫秒数内让当前正在执行的线程休眠。可以模拟网络延迟,做做倒计时。每个对象都有一把锁,sleep不会释放锁
3. join():等待该线程终止,线程的插队,线程强制执行
4. yield():暂停当前正在执行的线程对象,并执行其他线程。线程的礼让,不一定成功,看cpu心情
5. interrupt():中断线程,别用这个方式
6. isAlive():测试线程是否处于活动状态

4. 并发和线程同步

并发:同一个对象多个线程同时操作
线程同步:线程同步其实就是一种等待机制,多个需要同时访问此对象的线程进入这个对象的等待池形成队列

为了保证数据在方法中被访问时的正确性,在访问时加入`锁机制synchronized`,当一个线程获得对象的排他锁,独占资源,其他线程必须等待,使用后释放锁即可。

4. 互斥锁

1. Java语言中,引入了对象互斥锁的概念,来保证共享数据操作的完整性
2. 每个对象都对应于一个可称为"互斥锁"的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象
3. 关键字synchronized来与对象的互斥锁练习.当某个对象用synchronized修饰时,表名该对象在任一时刻只能由一个线程访问
4. 同步的局限性:导致程序的执行效率要更低
5. 同步方法(非静态的)的锁可以时this,也可以是其他对象(要求是同一个对象)
6. 同步方法(静态的)的锁为当前类本身

5. 线程的死锁

  • 基本介绍
    多个线程都占用了对方的锁资源,但不肯相让,导致了死锁,在编程时一定要避免死锁的发生
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值