多线程打印时会出现数据混乱,即使使用 Vector、Collections.synchronizedList 也会出现线程不安全的情况。
{
int b=3;
{
b=3; // 子块可以访问父块的变量,但在外部是访问不到的。
System.out.println(b);
}
}
类、类成员、类方法其实都是一种块。
类内部的代码块,优先于构造函数执行。如果都是块,则编写顺序决定了执行顺序。
静态代码块最优先执行。但是不管你实例化这个类几次,只会执行一次。因为它不是在类实例化时执行的,而是在类初始化时执行的。
synchronized(对象){
代码
}
同步代码块:括号里的“对象”被锁住,别的线程必须等待这个线程执行完成释放锁,才能再次给对象加锁,达到线程同步的目的,解除线程不安全的问题。