频道栏目
首页 > 程序开发 > 软件开发 > Java > 正文
java 学习之路——线程2(synchronized静态代码块)
2011-10-07 14:08:17      个评论      
收藏   我要投稿

 

实现同步方法的方式有两种:

  1.用synchronized关键字修饰的方法可以实现线程的同步;

  2.用synchronized代码块修饰的部分实现线程的同步。

以下为第二种方式的实现:

 

 

package com.lcq.ThreadTest; 

 

 

/**

 * 类名:ThreadTest6

 * 功能:线程的同步问题,使用关键字synchronized静态代码块修饰

 * 时间:

 * 结果:当一个synchronized块被调用时,该类的其他方法无法调用

 * @version 1.0

 * @author lcq

 */ 

 

 

public class ThreadTest6 { 

 

    public static void main(String[] args) { 

         

        Example2 example = new Example2(); 

         

        //定义两个线程访问同一个资源 

        Thread t1 = new MyThread6(example); 

        Thread t2 = new MyThread7(example); 

         

        //分别调用资源类的同步方法 

        t1.start(); 

        t2.start(); 

    } 

 

class Example2{ 

    /*

     * 定义一个同步类型的方法1

     */ 

    private Object obj = new Object(); 

    //private Object obj2 = new Object(); 

     

    public void execute(){ 

        synchronized(obj){ 

            for (int i = 0; i <20; i++) { 

            try { 

                Thread.sleep(500); 

            } catch (InterruptedException e) { 

                e.printStackTrace(); 

            } 

            System.out.println("Hello :" + i); 

        } 

        } 

         

         

    } 

     

    //定义一个同步类型的方法2 

    public void execute2(){ 

        synchronized (obj) { 

            for (int i = 0; i <20; i++) { 

            try { 

                Thread.sleep(500); 

            } catch (InterruptedException e) { 

                e.printStackTrace(); 

            } 

            System.out.println("World :" + i); 

        } 

 

        } 

            } 

     

     

 

//定义一个线程类1 

class MyThread7 extends Thread{ 

     

    Example2 example = new Example2(); 

    public MyThread7(Example2 example2){ 

        this.example = example2; 

    } 

    @Override 

    public void run() { 

        this.example.execute(); 

    } 

 

//定义一个线程类2 

class MyThread6 extends Thread{ 

     

    Example2 example = new Example2(); 

    public MyThread6(Example2 example2){ 

        this.example = example2; 

    } 

    @Override 

    public void run() { 

        this.example.execute2(); 

    } 

}   

 

摘自:找一种安静

点击复制链接 与好友分享!回本站首页
上一篇:java学习之路——小例子(实现输入年份,输出该年份的具体天数信息)
下一篇:java学习之路——线程3(线程之间的通信)
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站