灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3115回复:0

java例程练习(多线程[线程同步问题])

楼主#
更多 发布于:2012-09-08 09:43

//线程同步问题
public class TestThread implements Runnable{
    Timer timer = new Timer();

    public static void main(String[] args) {
        TestThread test = new TestThread();
        Thread t1 = new Thread(test);
        Thread t2 = new Thread(test);
        t1.setName("t1");
        t2.setName("t2");
        t1.start();
        t2.start();

    }

    public void run() {
        timer.add(Thread.currentThread().getName());
    }
}

class Timer {
    private static int num = 0;
    public void add(String name) {

        num ++;
         try {
            Thread.sleep(1);// ---放大效果
        } catch(interruptedException e) {}

        System.out.println//   可能被打断
            (name + ", 你是第" + num + "个使用timer的线程");
    }
}

//以下3个类相同,【运行结果】为第一个类的结果,请注释其他2个相同的类
//2,3两个类主要介绍synchronized 的使用方式

class Timer {
    private static int num = 0;
    public void add(String name) {
        synchronized(this) { //锁定代码段 www.atcpu.com  
            num ++;
             try {
                Thread.sleep(1);// ---放大效果
            } catch(InterruptedException e) {}

            System.out.println//   可能被打断
                (name + ", 你是第" + num + "个使用timer的线程");
        }
    }
}

class Timer {
    private static int num = 0;
    public synchronized void add(String name) {//锁定过程

        num ++;
         try {
            Thread.sleep(1);// ---放大效果
        } catch(InterruptedException e) {}

        System.out.println//   可能被打断
            (name + ", 你是第" + num + "个使用timer的线程");
    }
}


/*
运行结果
--------------------Configuration: <Default>--------------------
t1, 你是第2个使用timer的线程
t2, 你是第2个使用timer的线程

Process completed.

*/







摘自 Yours风之恋




喜欢0 评分0
游客

返回顶部