class Test
{
synchronized static void say Hello3()
{
}
synchronizedvoid getX()
{}
}
额 首先关键字要写到返回值类型之前。然后你可以开两个现成写个简单的加减法案例看看,———北乔峰
应该不会吧,同步貌似不在主线程中,我也不太清楚,打印日志看看
这个两个方法的执行互不影响。
是否同步就是不同的线程能不能在同一时间对同一方法进行访问。
我的理解应该是同步的,这两个方法的synchronized关键字表示对Test.class进行加锁,而我们知道内存中Test.class只会保留一份。
关于如何验证,可以在sayHello3方法中写一个循环,负责打印1到100,在getX方法中也写一个循环,负责打印101到200,然后自己构造多个线程,随机执行这两个函数中的一个,如果两次打印没有交叉出现,则表示同步(需要多次试验)。
我不理解楼主所说,什么叫这两个方法同步,我的理解是:synchronized你用来锁住两个方法:sayHello3(),getX()。那么这两个方法体,代码执行过程中
只允许一个线程位于方法体里,其他想执行方法的线程必须等待当前线程退出才可以。
现实应用如下场景:
一个人名叫王X的人 暗地销售火车票,数量为 SUM=1000;
某个时刻 用户甲从他那里购买了2张。
某个时刻 用户乙从他那里购买了4张。
某个时刻 用户丙从他那里购买了7张。
...............
购买者必须轮流购买火车票。
这是现实。
回归到代码吧。
购买操作对应于下面这个函数。
synchronized static void getProduct()
{
}
这就是同步,在多线程中,只允许一个线程(购买者)访问此资源(产品)以实现现实当中轮流购买的效果。
如果不同步会怎样???
回看上面的甲乙丙的购买过程,如果不进行同步
现在来了个和用户丙同一时刻购买者用户丁。
此时会怎样呢?
这就是资源抢夺情况。
“同”字是指协同、协助、互相配合。
可理解为线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,
于是停下来,示意B运行;B依言执行,再将结果给A;A再继续操作。
提示:synchronized 非常影响效率,能不锁整个函数的尽量不要锁整个函数。