下面两个方法同步吗,请说明理由,有什么方法可以验证?

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 非常影响效率,能不锁整个函数的尽量不要锁整个函数。