您的位置:首页 > 其它

自己在之前做两个项目中遇到多线程并发访问如何解决的一个简单demo程序

2014-03-28 19:06 661 查看
package com.geloin.main;

public class TestMoreThread {

public static void main(String[] args) {
final test t0=new test();
final test t1=new test();
Thread th1=new Thread() {
public void run() {
t0.function("Thread No1...");
};
};

Thread th2=new Thread(){
public void run() {
t1.function("Thread No2...");
};
};
th1.start();
th2.start();
}

}
class test{
public synchronized static void function(String test){
for(int i=0;i<5;i++){
System.out.println("Current Thread Name is:"+Thread.currentThread().getName()+" executed result is :" +test+i);
}
}
}




总结:

1、在多线程访问中,同步化静态化方法的时候,在类加载的时候就提供了静态方法的入口地址,属于类的访问方法。

2、当多线程访问的时候,如果类中的不同实例共同访问同步化的静态方法时,当一个线程在执行,其他线程就处于等待状态,直到当前线程执行完毕,从中看出不同类的实例共享同一个静态方法的入口地址,因而不会出现线程不安全的问题。

3、如果静态化普通方法则存在线程不安全的问题,由于类的不同对象在实例化的过程中,每个对象都单独拥有自身普通方法的入口地址,所以当多线程的不同对象访问的过程中就会出现并发时的数据不一致的问题,但是如果同步的是同一个对象在多线程访问时,同步化普通方法则不会出现线程不安全问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐