JAVA学习笔记(3)_____线程同步锁(synchronized)简单的应用

来源:互联网 发布:应用双开软件下载 编辑:程序博客网 时间:2024/05/17 07:51


class ShareData{    public static String szDatata=" ";}class ThreadDemo extends Thread{    private ShareData oShare;//声明ShareData数据域    public ThreadDemo() { }    public ThreadDemo(String szName,ShareData oShare) {        super(szName);//调用父类构造方法        this.oShare=oShare;          }    @Override    public void run()    {        //同步块,并指出同步数据oShare        synchronized(oShare)        {            for (int i = 0; i < 5; i++)            {                switch (this.getName()) {                    case "Thread 1":                        oShare.szDatata="这是第 1 个进程";                        //为了演示产生的问题,这里设置一次休眠                        try                        {                            Thread.sleep((int) (Math.random() * 1000));                        }                        catch (InterruptedException e) {  }                        System.out.println(this.getName()+"."+oShare.szDatata);                        break;                    case "Thread 2":                        oShare.szDatata="这是第 2 个进程";                        //为了演示产生的问题,这里设置一次休眠                        try                        {                            Thread.sleep((int) (Math.random() * 1000));                        }                        catch (InterruptedException e) { }                        System.out.println(this.getName()+"."+oShare.szDatata);                        break;                }            }             }           }}public class ThreadSynchronizedMain {    public static void main(String[] args) {        ShareData oShare=new ShareData();//创建初始化ShareData对象oShareData        ThreadDemo t1=new ThreadDemo("Thread 1", oShare);        ThreadDemo t2=new ThreadDemo("Thread 2", oShare);        t1.start();        t2.start();    }   }

我们可以看到设置了同步锁后,线程2只有在线程1运行结束后才开始运行。


0 0