标签:synchronized Thread 对象 void 修饰符 test new public
代码示例:
public class Hreflect {
public static void main(String[] args) {
try {
test t=new test();
}catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
class test{
public test() throws InterruptedException {
Thread one=new Thread(new Runnable() {
@Override
public void run() {
test.method1();
}
});
one.start();
Thread two=new Thread(new Runnable() {
@Override
public void run() {
test.method2();
}
});
two.start();
Thread three=new Thread(new Runnable() {
@Override
public void run() {
test.method3();
}
});
three.start();
}
static void method1()
{
synchronized (test.class)
{
System.out.println("我是类方法一但是方法里的synchronized修饰,执行5秒");
try{
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
static void method2()
{
try{
System.out.println("类方法2无synchronized但是我也被执行了,执行5秒");
Thread.sleep(5000);
}catch (InterruptedException e)
{
e.printStackTrace();
}
}
static synchronized void method3()
{
try{
System.out.println("我是类方法被synchronized修饰,开始执行5秒");
Thread.sleep(5000);
}catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
采用的线程同步对象来验证 类方法一保证占用当前对象来执行 因为要形成对比 类方法二没有加synchronized关键字 被执行是肯定的 为了验证类方法三,唯一同类方法二不同的是在其前面加上了synchronized关键字
如果类方法前,加上修饰符 synchronized,同步对象不是当前类对象
理应被执行 因为占用的同步对象不是当前类对象但是其结果只是类方法二执行了 而且是等待类方法一释放才执行的 因此得出——类方法前,加上修饰符 synchronized,同步对象是当前所获取的类对象
标签:synchronized,Thread,对象,void,修饰符,test,new,public 来源: https://blog.csdn.net/yooppa/article/details/122245597
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。