非线性安全

2017-08-20  本文已影响0人  Carver_c5f0

线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。

线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据

这里举个非线性安全的例子:

public static void main(String[] args) throws InterruptedException {

Mythread thMythread=new Mythread();

final Thread thread1=new Thread(thMythread);

Thread thread2=new Thread(thMythread);

Thread thread3=new Thread(thMythread);

Thread thread4=new Thread(thMythread);

Thread thread5=new Thread(thMythread);

thread1.start();

thread2.start();

thread3.start();

thread4.start();

thread5.start();

new Thread(new Runnable() {

@Override

public void run() {

// TODO Auto-generated method stub

try {

Thread.sleep(100);

System.out.println(thread1.isAlive());

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}).start();

}

class Mythread extends Thread{

private int sharedate=10;

@Override

public void run() {

// TODO Auto-generated method stub

System.out.println(--sharedate);

}

}

运行结果是:

如果你学过操作系统,你就会发现Mythread的sharedata是个共享区呀,怎么能不加锁呢,而在java中有个synchronized的东西,我只需要在run方法加synchronized,就可以实现线程安全了,而添加了这个synchronized 就相当于为这个方法加锁,当有一个线程运行这个方法的时候,其他线程必须要等待这个线程执行完才能执行这个方法。

上一篇下一篇

猜你喜欢

热点阅读