多线程基础(二)

锁机制

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方法。