线程学习之--8线程同步

来源:互联网 发布:oc高级编程pdf 下载 编辑:程序博客网 时间:2024/05/16 10:10
怎样解决线程的安全问题:
解决思路:
将多条线程操作的共享数据线程代码封装起来,当有线程在执行这些代码的时候,
其他的线程是不可以参与这个运算的,必须要等到当前的线程把这些代码都执行完毕后,
其他的线程才可参与运算。

在java中,是使用同步代码块的方式来解决这个问题的。
同步代码块的格式是:
synchronized(对象)
{
    需要被同步的代码;
}

同步的好处:解决了线程的安全问题。

同步的弊端:相对来说,降低了运行的效率,因为同步以外的线程都会来判断同步锁。

小demo:(解决线程问题)
package com;
/**
 * 需求:买票系统。一共有一百张火车票,同时有四个窗口卖着100张票。使用多线程的技术(也可以使用static方法)。
 * @author 勇
 *
 */

class Piao implements Runnable{//火车票类

    private int num = 100;//定义一百张票
    public void run() {
        while(true){
            synchronized (this) {
                if(num>0){
                    try{Thread.sleep(10);}catch(Exception e) {e.printStackTrace();}
                    System.out.println(Thread.currentThread().getName()+">>"+ num--);
                }    
            }                    
        }
    }    
}

public class Ticket {
    public static void main(String[] args) {
        Piao p=new Piao();
        Thread t1=new Thread(p);
        Thread t2=new Thread(p);
        Thread t3=new Thread(p);
        Thread t4=new Thread(p);
        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }

}