Java--线程--线程控制,线程安全,线程同步,线程等待,线程交互,死锁,互斥锁,读写锁

多进程
  每个进程间拥有独立的内存空间
  0~4G
 单核
  系统将cpu所有时间分割为相同的时间片
 由内核负责调度
 
 线程属于进程内部
 进程内部的所有线程共享进程的内存
 让一个进程拥有同时执行多段代码的能力
 


 java中的线程由jvm线程调度器负责调度
 
 可执行队列
 
 等待队列
 
 linux中的jvm没有实现线程优先级
 windows中实现了该功能
 
 不要使用优先级和任何改变线程执行顺序的方法来决定线程执行的顺序
 
java 中的线程必须是java.lang.Thread对象的实例

extends Thread
implements Runnable //实现继承别的对象
重写run方法

 

启动线程必须调用start方法
一个线程只能调用一次start方法
如果要重复启动一个线程,必须再次实例化对象

 

使当前线程休眠 
 Thread.sleep(时间);  单位为毫秒  
 1s == 1000 ms (毫秒)  
 1ms == 1000 microseconds(微秒)
 
实现一个线程,每个一秒执行一次,
循环变量为10的倍数,则输出该数 


线程控制
 start() 启动线程
 
 interrupt()  中断线程,唤醒正在休眠线程
 


 检测当前线程是否被中断
 isInterrupted()  只检查中断标志
 interrupted()  检查并清除中断标志
 Thread.sleep()  线程休眠,清除当前中断标志
 
 Thread.currentThread()  获取当前线程对象
 
 getPriority()  获取线程优先级
 setPriority()  修改线程优先级,linux没有实现
 
 
 
容易造成死锁
 stop()   停止
 suspend()  挂起
 destory()
 resume()

线程安全
 线程竞争
 
线程同步:耗费资源
 每次当一个线程进入该代码块时,先获取该锁,直到代码块结束
同步方法 
 synchronized 
同步代码块
 每个对象内部都包含一把锁
 synchronized (对象){
 
 
 }
 表示该方法每次只能由一个线程执行
 同步方法方式时候相当于
 synchronized (this){
 }

 

 


死锁产生
 A -->  key1   key2
 B -->  key2   key1
 A B线程有可能产生死锁
 
避免死锁
 获取锁和释放锁的顺序尽量一致
 A -->  key1   key2
 B -->  key1   key2
 
 A -->  key2   key1
 B -->  key2   key1
 
互斥锁
 ReentrantLock
 tryLock(times, TimeUint)
  等待指定时间,如果在指定时间内获取到该锁,返回true
  超时返回false
 unlock()  释放锁
 


读写锁:读写数据时候使用
 ReentrantReadWriteLock
 lock.readLock();  获取读锁
 lock.writeLock(); 获取写锁
 
 lock.readLock().lock()
 lock.writeLock().lock()
 lock.readLock().unlock()
 lock.writeLock().unlock()
 读锁没有释放,不允许写
 写锁没有释放,不允许读
 


线程等待:不属于Thread对象,属于Object
 wait()  
 notify()  唤醒其中一个等待的线程
 notifyAll() 唤醒所有等待的线程
 
 A     C
 
 A-->C.wait()  A对象在C对象上等待,同步C对象
 必须等待notify唤醒
 
 
线程交互  IO操作,流
 PipedInputStream
 PipedOutputStream

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值