java 线程间变量共享_Java线程间共享实现方法详解

本文详细介绍了Java中线程间变量共享的实现,包括synchronize的关键字用法,如对象锁和类锁,并通过实例展示了它们的工作原理。此外,还讨论了volatile的特性,保证了变量的可见性和有序性,以及ThreadLocal如何为每个线程提供独立的变量副本以避免线程安全问题。
摘要由CSDN通过智能技术生成

一、synchronize对象锁和类锁

synchronize为多线程关键字是一种同步锁,它可以修饰以下几种对象:

代码块:被修饰的代码块被称为同步代码块,作用的范围是{}里面的代码,作用的对象是调用这个代码块的对象

方法:被修饰的方法称为同步方法,作用的范围是整个方法,作用的对象是调用这个方法的对象

类:作用的范围是synchronize后面括号里的部分,作用的对象是当前这个类

1、对象锁

下面由一个栗子引入:

public class TestSynchronize {

//加了对象锁的方法

private synchronized void syn(){

//自定义sleep工具类

SleepTools.second(2);

System.out.println("syn is going..."+this.toString());

SleepTools.second(2);

System.out.println("syn ended..."+this.toString());

}

//调用了对象锁方法的线程1

private static class thread implements Runnable{

private TestSynchronize testSynchronize;

public thread(TestSynchronize testSynchronize){

this.testSynchronize = testSynchronize;

}

@Override

public void run() {

System.out.println("thread is running...");

testSynchronize.syn();

}

}

//调用了对象锁方法的线程2

private static class thread2 implements Runnable{

private TestSynchronize testSynchronize;

public thread2(TestSynchronize testSynchronize){

this.testSynchronize = testSynchronize;

}

@Override

public void run() {

System.out.println("thread2 is running...");

testSynchronize.syn();

}

}

public static void main(String[] args) {

TestSynchronize testSynchronize = new TestSynchronize();

thread thread = new thread(testSynchronize);

TestSynchronize testSynchronize2 = new TestSynchronize();

thread2 thread2 = new thread2(testSynchronize);

//thread2 thread2 = new thread2(testSynchronize2);

new Thread(thread).start();

new Thread(thread2).start();

}

}

/**

当两个线程都将testSynchronize传入时(即使用同一个对象调用加了对象锁的方法)运行结果如下:

thread is running...

thread2 is running...

syn is going...com.zl.synchronize.TestSynchronize@6b52350c

syn ended...com.zl.synchronize

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值