多线程基础(二)
锁机制
Syncronized内置锁
主要是用来锁对象,锁方法,锁类。
对象锁与类锁的区别?
类锁锁定的是class对象,class对象在虚拟机里面的,在虚拟机里只有一个
而对象锁是new出来的实例,故对象锁于类锁没有任何联系,可以同时进行。对象锁也要保证是否锁住的同一个对象,否则无效。
Volatile关键字,最轻量级的线程共享。
适用于一个线程写,多个线程读,缺点是无法实现线程的原子性。
ThreadLocal 线程变量。使用它可以确保自己线程的那一部分不受影响。
怎么去使用它?
package com;
public class ThreadLocalDemo extends Thread {
public int id;
public void getId(int id) {
this.id = id;
}
@Override
public void run() {
while (true) {
System.out.println(Thread.currentThread().getName());
Integer s = threadId.get();
s = s + 1;
threadId.set(s);
System.out.println(threadId.get());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
super.run();
}
}
private static final ThreadLocal<Integer> threadId = new ThreadLocal<Integer>() {
@Override
protected Integer initialValue() {
return 1;
}
};
public static void main(String[] args) {
ThreadLocalDemo tld = new ThreadLocalDemo();
tld.start();
ThreadLocalDemo tld2 = new ThreadLocalDemo();
tld2.start();
}
}
类似于Map<Thread,Integer>
其主要是实现initialValue 方法与get 方法set方法,以及remove方法。