多线程01_入门
其他
2018-09-02 14:45:04
阅读次数: 0
线程和进程
简单入门
多线程
1.创建多线程
- 继承Thread类
- 实现Runnable接口(推荐)
因为一是避免Java单继承,二是面向接口编程
2.线程常用方法
- 设置线程名
- 设置守护线程
守护线程即服务线程,为其他线程服务,比如GC线程;当其他线程执行完,虚拟机退出时,守护线程也随之结束
- 使用setDaemon(boolean on)来开启
- 注意的地方
- 先设置为守护线程再启动,否则报异常IllegalThreaStateException()
- 守护线程中产生的线程也是守护线程
- 使用守护线程不要访问共享资源,比如数据库、文件等,因为不知道它什么时候会结束
- 设置线程优先级
仅仅是增大线程获取cpu的几率,Java提供的优先级默认是5,最低是1,最高是10
- 中断进程
- 正常进程调用interrupt方法仅仅是设置了一个中断标志为true,线程继续执行不受影响
- 阻塞状态的线程调用interrupt方法,那么会抛出中断异常(用户捕捉到中断异常可以进行自定义操作),设置中断标志位为false,同时该线程会退出阻塞
- isInterrupted方法可以返回当前中断标志,用户可以用其监听中断状态
while(!Thread.currentThread.isInterrupted()){}
,当中断时执行中断处理代码
- interrupted方法返回当前中断标志,同时重置中断标志为false
- 阻塞方法
- 线程睡眠sleep方法和线程让步yeild方法
- 两者相似,sleep方法可以设置线程暂停时间,同时让出CPU,进入不可运行状态;让其他线程有机会执行,但是不释放锁,即其他线程不能访问共享数据
- yeild方法也是使线程暂停,同时让出CPU,但是它仍处于可运行状态;它是让相同优先级的线程有机会执行,如果检测没有同优先级的线程,它会继续执行原来的线程,它也不释放锁
- 线程同步join方法
- join方法是暂停当前线程的执行,而等待指定线程执行完毕或者执行一定时间
- 参数可选填时间,表示指定线程执行时间
- 必须在start之后使用才有意义
- join使线程的并发执行变成串行执行
- join使用了线程的wait方法来实现同步,如果A线程内调用B线程的join,就是A当线程调用了B线程的wait方法,A线程进入阻塞状态,直到B线程执行完
3.线程生命周期
4.简单代码测试
测试一
转载自www.cnblogs.com/pycrab/p/9573632.html