线程的笔记

【线程】
一:进程和线程
1.进程:从本质上说是一个E车轨的程序,它不仅执行着自身的指令序列,拥有自己的数据空间(系统为每个进程开辟独立的地址空间)而且还占用着一定得系统资源,如cpu,内存空间以及设备的使用权。
2.线程:线程就是进程内部的一个顺序控制流,它和进程一样,有
一个入口一个出口,和一个顺序执行序列,与进程不同的是线程不
能单独运行,它必须依赖于某个进程运行,同一个进程中有不同线
程,虽执行流不同,但共享着一定数据空间和系统资源。
*****线程是进程的细分,进程独享系统资源

二:线程的状态及生命周期
状态:
1.新建态(new)
当用new语句创建一个线程时,该线程不会立即运行。但会分配
相应的系统资源(内存),此时线程处于就绪状态。如果需要启动线
程,调用线程start() 方法。

2.就绪态(ramable)
一个线程启动后就进入可运行状态,在某一时刻可运行状态不
一定是可运行的线程,将进入线程队列排队,等待cpu服务,需要
根据操作系统是否给该线程分配时间而定,只有当给线程在某个
cpu周期内,获得cpu执行权。

3.运行态
当某个线程获得cpu使用权以后,此状态就是运行状态

4.阻塞/挂起态(blocbod)
挂起状态就是线程被挂起,不运行,等适当时候在运行,必定
(1).调用sleep();要线程休眠
(2).调用wait():线程等待
(3).调用subpend():暂停
(4).线程试图锁住被其它线程锁住的对象。


5.终止态(clead)
处于终止状态的线程不具备继续运行的能力
1.正常运行的线程完成了它的全部工作及执行完了run()方法最后一个语句就退出

2.线程被提前强制性终止,线程处于死亡后处于终止状态,另外,某个异常终止run()方法后,也就导致线程处于终止状态


三:线程的调度和优先级
【Thread类】

1.max_priority :线程可以具有的最高优先级。
2.man_PRIORITY : 线程可以具有的最低优先级
3.NORM_PRIORITy:分配给线程的默认优先级。

构造方法:
1.Thread() 空的
2.Thread(Runnable target) 分配一个新的Thread对象
3.Thread(Runnable target, String name)
4.Thread(String name) 分配新的Thread对象,取名叫name0
5.Thread(ThreadGroup group, Runnable target) Runnable构造一个新的Thread对象,将thread放进group组里
6.Thread(ThreadGroup group, Runnable target, String name)

7.Thread(ThreadGroup group, Runnable target, String name, long stackSize)

8.Thread(ThreadGroup group, String name) 将线程放进组里,为线程取了一个名字

方法摘要
1.activeCount() 返回活动的线程处。
2.currentThread() 返回正在执行的线程。


四:实现线程有哪几种方法?
1.继承Thread
2.实现了Rnnable接口(只具备线程的行为,不具备线程的生命周期)


五:Therd常用方法
1.setPriority(int newPriority) 设置优先级
2.join(long millis) 设置等待的时间
3.isInterrupted()测试线程是否终止终;
4.interrupted() 全都返回false
5.interrupt() 中断线程

当一个线程调用 wait()、join()、sleep(long)将会收到异常

六:isDaemon() 测试线程是否为精灵线程

线程分为两种:
1.用户线程
2.精灵线程(守护线程)

一:在一个用户线程start之前把它编译成精灵线程,不然不能变成精灵线程。
二只有把用户线程变成精灵线程,不可以把精灵线程变成用户线程
三:精灵线程不具备生命周期。它随着虚拟机的结束而结束,随着虚拟机的开始而开始。


【ThreadGroup 类】
1.ThreadGroup(String name) String给线程组取了个名字是name
2.ThreadGroup(ThreadGroup parent, String name)
把一个parent放进String数组里,并给数组取了一个名字


并发与并行
1.并发是一个cpu为多个线程服务
2.并行是多个cpu为多个线程服务


线程同步的方法:
1. wait():使一个线程处于等待状态,并且释放所持有的对象的lock。
2. sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。
3. notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。 4.Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

一个线程进入一个对象的一个synchronized方法后,其它线程不能进入此对象的其它方法,一个对象的一个synchronized方法只能由一个线程访问。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值