Java基础知识总结:多线程

多线程学习总结:

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();

3Thread启动后执行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


你可能感兴趣的:(Java基础学习)