Java多线程5:方法内部变量为线程安全

非线程安全问题存在于实例变量中,如果是方法内部的私有变量,则不存在非线程安全问题,所得到的结果是线程安全的。

原因

(1)方法内部的变量为方法私有的变量,其生存周期随着方法的结束而终结。
(2)每个线程执行的时候会把局部变量存放在各自栈帧的工作内存中(栈帧进入虚拟机栈),虚拟机栈线程间不共享,故不存在线程安全问题。

示例
public class Demo1_jubuanquan {
	
	public static void main(String[] args) {
		HasSelfPrivateNum numRef = new HasSelfPrivateNum();
		ThreadA athread = new ThreadA(numRef);
		athread.start();
		ThreadB bthread = new ThreadB(numRef);
		bthread.start();
	}
}

class HasSelfPrivateNum {
	public void AddI (String username) {
		try {
			int num = 0;
			if (username.equals("a")) {
				num = 100;
				System.out.println("a set over!");
				Thread.sleep(2000);
			} else {
				num = 200;
				System.out.println("b set over!");
			}
			System.out.println(username + " num=" + num);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}

class ThreadA extends Thread {
	private HasSelfPrivateNum numRef;
	
	public ThreadA(HasSelfPrivateNum numRef) {
		super();
		this.numRef = numRef;
	}
	
	public void run() {
		super.run();
		numRef.AddI("a");
	}
}

class ThreadB extends Thread {
	private HasSelfPrivateNum numRef;
	
	public ThreadB(HasSelfPrivateNum numRef) {
		super();
		this.numRef = numRef;
	}
	
	public void run() {
		super.run();
		numRef.AddI("b");
	}
}
运行结果

Java多线程5:方法内部变量为线程安全_第1张图片

你可能感兴趣的:(【Java并发编程】,java,jvm,开发语言)