`
阿尔萨斯
  • 浏览: 4180152 次
社区版块
存档分类
最新评论

JAVA进阶-多线程(1)

 
阅读更多


优先级>1~10


线程调度
OS:
抢占式>更高优先级的线程会取代当前运行的线程
非抢占式>即使存在更高优先的线程,也不会取代当前运行的线程
JVM:
绿色线程:最简单的线程处理模型.对os来说只有一个进程一个线程,因此
jvm必须维护该创建线程的原始信息等..


守护线程/非守护线程:
在创建线程的父线程死亡时,守护线程会自动结束,而非守护线程
则不会.


创建线程
实现Runnable接口 Thread类 ThreadGroup类


静态方法
int Thread.activeCount();返回当前线程所在的线程组中活动线程数目
Thread Thread.currentThread();返回当前线程
void Thread.sleep(long);


基本操作
1.设置daemon/non-daemon属性
setDaemon();设置是否为守护线程
2.启动
调用start()方法,系统回调run()方法
3.停止线程/挂起/恢复线程
stop()/suspend()/resume();
4.转让控制权给其他线程
yield()一般指让其他同优先级的线程获取cpu时间.
5.改变优先级
setPriority()
6.等待其他对象
obj.wait()
7.中断线程
interrupt()>发送中断线程的消息
isInterrupted()>不清空标志,该方法为对象方法;返回当前线程是否被中断
Thread.interrupted()>返回标志并清空,该标志表示当前线程是否被中断


同步 对象锁
线程分配CPU是异步的,线程的执行顺序也是不可预算的,当不同的线程访问共同的
资源,就会造成资源的不安全性,在底层中,每个线程访问资源时,只是访问了资源的
缓存值,不同的执行顺序导致了不同时间内缓存资源的不一致性.java提供了
synchronized关键字,当某个线程第一次访问该资源时,锁定资源,直至线程访问完毕,
其他线程才可以访问,当该线程在访问资源中被中断的时候,其他线程无法访问该资源.


object.wait();/object.notify();
这2个函数都必须在synchronized的代码块或者函数块里面使用.
当调用对象的wait方法时候,线程暂停,直至该对象的notify被调用,wait方法的后面的
代码才被执行.当该对象有多个wait方法被调用时,唤醒线程的方法会唤醒最早调用
wait的线程.系统同时还提供了notifyAll()方法以唤醒所有等待对象.
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics