是资源(内存)的载体也是线程的载体
线程有互斥和同步
JAVA多线程常用方法
1.JAVA对线程的支持
java.lang(class thread and interface runnable 还有 run方法很重要)
2.线程的创建和启动
创建 thread()
启动(void star)线程休眠static void sleep(long millis)使其他线程等待当前线程终止 static void yield()当前运行线程释放处理器资源
获取线程引用 static thread currentthread()返回当前运行的线程引用
3.线程常用方法
4.如何停止线程
thread actor=new actor();
boolean keeprunning=true;//可以用在while方法中控制线程运行次数
class为外部类只能有一个
volatile保证了线程可以正确的读取其他线程写入的值
stage run()
关键先生keypersonthread()
join方法可以中途插入线程,停止所有方法,等待这个线程完毕
使用stop停止线程是错误的方法
sleep中斷线程会出现异常,进入阻塞状态,此时再用interrupt将中断状态设置为true,sleep检测到中断标志位true此时中断标志转换为false,此时interupt就不会终止,如果使用interupt会终止停止标志,主线程会继续运行
线程1由于sleep、join等方法进入阻塞状态,其他线程(主线程)运行中调用线程1的interrupt方法,使得线程1的中断标志位置为true,此时线程1的sleep或join等方法检测到其中断标志位为true,抛出中断异常停止阻塞状态清空中断标志即置为false,因此,无法停止线程。
synchronized关键字的作用是对一个对象或者是方法(其实还是持有这个方法的对象)加上锁,加锁实质上是取得对象的访问权限,如果对象已经被其他者所加锁,那么请求者就只好进入等待队列(休眠),知道被其他线程使用nodify方法唤醒。在被加锁的代码块当中,可能会出现一些情况,使得代码需要一些条件才能继续运行,此时为了让这个代码块能够被其他的线程执行到,必须释放锁,nodify方法除了唤醒其他的线程,并把锁交给它之外还有释放锁+让自己休眠的作用。
synchronuzed()锁定线程,让线程只被一个方法使用,nodifyall可以唤醒其他线程。
wait.set()方法可以指定若干个方法随机为下一个线程上锁
创建线程有两种方式:继承Thread类和Runnable接口;继承Runnable接口是将Runnaleb作为参数传入Thread中来创建线程;用户可以通过重写run方法来规定线程来做哪些事情,即任务;因为多个线程争抢cpu资源,可能会造成数据的破坏,因此可通过线程锁即synchronized(中文意思:同步的)关键字配合wait方法来过滤掉不满足条件的线程,使这些线程保持休眠状态知道被重新唤醒,而满足条件的线程继续执行,执行完毕后,通过notify()/notifyAll()方法唤醒处于睡眠状态的线程,重新竞争资源,然后再次通过线程锁重新筛选,循环往复
什么是死锁
多线程常用的交互模型
producer-consumer
java5中并发编程工具 java,util.concurrent
推荐读书 core java java concurrency in practice