class Test
{
synchronized static void say Hello3()
{
}
synchronizedvoid getX()
{}
}
现实应用如下场景:
一个人名叫王X的人 暗地销售火车票,数量为 SUM=1000;
某个时刻 用户甲从他那里购买了2张。
某个时刻 用户乙从他那里购买了4张。
某个时刻 用户丙从他那里购买了7张。
...............
购买者必须轮流购买火车票。
这是现实。
回归到代码吧。
购买操作对应于下面这个函数。
synchronized static void getProduct()
{
}
这就是同步,在多线程中,只允许一个线程(购买者)访问此资源(产品)以实现现实当中轮流购买的效果。
如果不同步会怎样???
回看上面的甲乙丙的购买过程,如果不进行同步
现在来了个和用户丙同一时刻购买者用户丁。
此时会怎样呢?
这就是资源抢夺情况。
“同”字是指协同、协助、互相配合。
可理解为线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,
于是停下来,示意B运行;B依言执行,再将结果给A;A再继续操作。
提示:synchronized 非常影响效率,能不锁整个函数的尽量不要锁整个函数。