在写线程的时候必须考虑线程的安全问题。产生的原因:1.多个线程在操作共享的数据时。2.操作共享
数据的代码有多条代码。当一个线程操作多条代码的过程中,其他线程参与了运算。就会导致产生线程
的安全隐患。
如:卖入场券的时候 ,多线程操作一个入场券的总票数,当票卖到最后一张的时候,其他线程参与进来
然后继续卖,就会产生负数票。这时就是线程的安全隐患。
如:
class ThreadImpl
{
public static void main(String[] args)
{
System.out.println("Hello World!");
Tiket T = new Tiket();
Thread T1 = new Thread(T);
Thread T2 = new Thread(T);
Thread T3 = new Thread(T);
Thread T4 = new Thread(T);
T1.start();
T2.start();
T3.start();
T4.start();
}
}
class Tiket implements Runnable
{
private int num =100;
Object obj = new Object();
public void run()
{
show();
}
private void show()
{
while(true)
{
synchronized(obj){//局部代码块来限定起来,不让别的县城参与进来
if(num>0){
//这里让线程先暂时停止,然后捕获异常不错处理。
try{Thread.sleep(10);}catch(InterruptedException e){}
//捕获线程操作同一个数时是否会产生负数
System.out.println(Thread.currentThread().getName
()+"====="+num);//输出测试结果然后看是否两个线程并发运行.
num--;
}
}
}
}
}
解决隐患思路:当前线程在操作多条代码时,其他线程不能参与操作。这样就用到同步代码块。关键字
的是:synchronized(对象:任何对象)
---------------------------------------------------------------------------------------------------------
多线程是否除了在操作多条代码会出现弊端,还会有其他弊端吗? |
|