多线程静态同步函数和非静态同步函数的区别是啥?
静态同步函数:就是方法使用了static关键字修饰
非静态同步函数:没有用static关键字修饰的方法,也就是使用this锁的同步函数
那么静态同步函数使用的啥锁呢?
分析:两个线程,一个线程使用静态同步函数,一个使用同步代码块this锁,如果线程不同步(线程不安全),就说明静态同步函数使用的不是this锁,如果线程同步,就说明使用的是this锁。
好了,我们用代码来进行验证吧:
package com.newDemo.controller.test;
class trainDemo12 implements Runnable{
private static int counttrain=100;//全局变量100
private static Object oj = new Object(); //对象锁
public boolean flag = true; //改变true和false,来改变阀门,
public void run() {
if(flag){
//使用同步代码块
while(counttrain>0){
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (this) {
//这段代码只能只能有一个线程进行访问,另一个必须拿到锁的时候才能访问
if(counttrain>0){
System.out.println(Thread.currentThread().getName() + ",出售第" +