Java多线程(1)
线程与进程
- 进程:程序的执行过程
- 线程:线程共享进程的资源
Java多线程
- 实现的方式
- 继承Tread类:使用getName()获取当前线程名
- 实现Runnable接口:Thread.currentThead().getName()获取当前线程的名称
- 线程启动
- Thread对象.start()方法
- 线程休眠
- Thread.sleep()方法
- 当前线程阻塞
- t.join()方法来阻塞当前运行线程,知道线程t运行完成,当前线程继续运行
- 常用方法
Java线程可见性问题
- volatile关键字,保证了线程可以正确读取其他线程写入的值
正确停止Java线程的方式
- 不要使用stop方法
- 正确方法:使用退出标志来退出线程
经典错误就是使用interrupt方法,这让线程的interrupted属性被设置,当线程调用sleep、join方法处于阻塞态时,被其他线程调用interrupt唤醒会抛出异常
线程交互
争用条件:当多个线程同时访问同一数据时,每个线程都尝试操作该数据,从而导致这个数据被破坏
互斥与同步
互斥:同一时间只能有一个线程访问该资源
实现方法:加锁
同步:一种通信机制,当一个线程操作完成后,以某种方式通知其他线程
实现:使用NotifyAll方法唤醒其他线程去竞争锁,竞争成功后从上一次wait方法后执行