多线程学习总结:
Thread常用方法
sleep(longmillis, int nanos) 线程休眠 millis休眠的时间,单位是毫秒,可以精确到纳秒
join(long millis, int nanos) 调用线程可以让其它线程等待自己运行,直到结束
staticvoid yield() 当前运行线程释放处理器资源并且重新去竞争处理器资源
staticThread currentThread() 返回当前正在处理器上运行的线程的引用
重载的几个形式
1.没有参数,指明了其它的线程一定要等待正在执行的线程执行完毕之后,都会获得运行的机会
2.nanos是要把精确度改变,可改成纳秒
------------------------------------------------------------------------------------------------------------------------------
线程的使用
每一个java文件中只能有一个public类
两种方法实现线程:
1、继承Thread 类
class MyThreadextends Thread{};
Thread myThread =new MyThread();
myThread.start();
2、实现Runnable接口
class MyRunnable implements Runnable{}
新建线程对象:Thread myRunnable = new Thread(newMyRunnable);
myRunnable.start();
3、Thread启动后执行run()方法,run()方法用于实现业务层代码
4、若实现接口通过Thread.currentThread().getName()方法获取当前线程名称,继承Thread则getName()方法获取当前线程。
--------------------------------------------------------------------------------------------------------------
线程的停止:
线程的停止不可以调用stop()方法,谨慎使用interrupt()方法,应设置停止标志flag,代码如下:
设置布尔变量:
//volatile保证了线程可以正确读取其他线程写入的值
//可见性ref JVM,happens-before原则
volatileboolean keepRunning = true;
调用while条件语句:
While( keepRunning ){
…(线程操作代码)
};
当需要停止线程时,只需令keepRunning= false;即可
2016.8.1.傍晚:线程的交互
@Java线程——线程交互——争用条件
1、当多个线程同时共享访问同一数据(内存区域)时,每个线程都尝试操作该数据,从而导致数据被破坏(corrupted),这种现象称为争用条件
2、原因是,每个线程在操作数据时,会先将数据初值读【取到自己获得的内存中】,然后在内存中进行运算后,重新赋值到数据。
3、争用条件:线程1在还【未重新将值赋回去时】,线程1阻塞,线程2开始访问该数据,然后进行了修改,之后被阻塞的线程1再获得资源,而将之前计算的值覆盖掉线程2所修改的值,就出现了数据丢失情况
-----------------------------------------------------------------------------------------
互斥:synchronized(lockObj){ //互斥的代码块 }
1.保证的同一时间,只有一个线程获得lockObj
同步:wait();notify();notifyAll();
1.wait();notify();notifyAll();都是属于object类,并不是thread类
2.notify()唤醒waitset中的一条线程,而notifyall()唤醒所有线程
3.同步是两个线程之间的一种交互的操作(一个线程发出消息另外一个线程响应)。
-----------------------------------------------------------------------------------------
@Java线程——线程交互——扩展建议
1、JavaMemory Mode:JMM描述了java线程如何通过内存进行交互,了解happens-before,synchronized,voliatile & final
2、Locks% Condition:锁机制和等待条件的高层实现 java.util,concurrent.locks
3、线程安全性:原子性与可见性,死锁等
4、多线程常用的交互模型
·Producer-Consumer模型
·Read-Write Lock模型
·Future模型
· WorkerThread模型
5、Java5中并发编程工具:java.util.concurrent 线程池ExcutorService Callable&Future BlockingQueue
6、推荐书本:CoreJava & JavaConcurrency In Practice