Java static关键字
静态变量:对所有的对象共享,内存中只有一个副本。只会在类初次加载时初始化。
非静态变量:是对象拥有的,在对象创建时初始化,存在多个副本,对个对象拥有的副本互不影响。
静态方法:(线程安全)静态方法不依赖于任何对象就可以进行访问,属于类本身,它没有this。
非静态方法:又叫实例化方法,属于实例对象。
误区:static并不会影响方法或者变量的作用域
staic 关键字踩坑
/**
* @author LuoYuSanQian
* @version 1.0
* @date 2022/3/15 20:52
*/
public class threadtest {
public static void main(String[] args) {
To a = new To();
To a1 = new To();
new Thread(a).start();
new Thread(a1).start();
}
}
class To implements Runnable {
static int yy=100;
//非静态方法(实例方法)操作的是实例化对象也就是this,也就是说synchronized此时锁的是不同对象。普通方法在此处并不能实现线程安全。
//所以这里要设置为static对象
public static synchronized void s(){
if (yy <=0) {
return;
}
try {
Thread. sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(--yy+ " "+Thread.currentThread().getName());
}
@Override
public void run() {
while (true) {
s();
}
}
}