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

游戏开发论坛:http://jiushun8.com/forum.php?mod=viewthread&tid=3816&extra=page%3D1

您的回应...

相关话题

查看全部

也许你感兴趣

换一批

热门标签

更多