多线程基础(二)

锁机制

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

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值