A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在写线程的时候必须考虑线程的安全问题。产生的原因: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(对象:任何对象)
---------------------------------------------------------------------------------------------------------
多线程是否除了在操作多条代码会出现弊端,还会有其他弊端吗?

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马