Java中实现多线程
1.继承Thread,重写里面的run方法
2.实现runnable接口
Java同步机制的实现方式
ThreadLocal,synchronized,wait,notify,volatile
ThreadLocal 保证不同线程拥有不同实例,相同线程一定拥有相同的实例,即为每一个使用该变量的线程提供一个该变量值得副本,每个线程都可以独立改变自己的副本,而不是与其他线程的副本冲突.。
优势:提供了线程安全的共享对象与其它同步机制的区别:同步机制是为了同步多个线程对相同资源的并发访问,是为了多个线程之就进行通信;而ThreadLocal是隔离多个线程的数据共享,从根本上就不在多个线程之间共享资源
volatile 修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。
synchronized 代码块中,或者常量时,不必使用
下面先线程同步的例子
线程B运行十次,线程A运行一次
public class ThreadRunA {
public static void main(String[] args) {
ThreadRunB b = new ThreadRunB();
b.start();
synchronized(b) {
try {
b.wait();
for (int j = 0;j <10;j++ ) {
b.notify();
if (j != 9) {
b.wait();
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class ThreadRunB extends Thread {
public void run() {
synchronized (this) {
for (int i = 0; i < 100; i++) {
if (i != 0 && i % 10 == 0) {
notify();
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}