码迷,mamicode.com
首页 > 编程语言 > 详细

Java线程同步

时间:2015-11-09 18:58:01      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:

假设一台5个人同时要上网

每个人上时间1~5分钟不等

加锁同步情况:排队上网,每个人都在自己的上网时间完毕后出来。

 

静态方法同步代码

技术分享
class Person extends Thread{
    private Random r = new Random();
    private int Num;
    public Person(int Num){
        this.Num = Num;
    }
    public void run() {
        toileting(Num, r.nextInt(4) + 1);
    }
    public static synchronized void toileting(int tNo2, int time){
        for (int i = 0; i < time; i++) {
            System.out.println("第" + tNo2 + "位, 上了" + i + "分钟");
        }
    }
}

public class SetTest01 {
    public static void main(String[] args) {
        //五个人
        for (int i = 0; i < 4; i++) {
            new Person(i).start();
        }
    }
}
View Code

代码块同步代码

技术分享
class Person extends Thread{
    private Random r = new Random();
    private int Num;
    public Person(int Num){
        this.Num = Num;
    }
    public void run() {
        synchronized (Person.class) {//此处锁可自定义定,但必须相同,用不同锁无效
            for (int i = 0; i < Num; i++) {
                System.out.println("第" + Num + "位, 上了" + i + "分钟");
            }
        }
    }
}

public class SetTest01 {
    public static void main(String[] args) {
        //五个人
        for (int i = 0; i < 4; i++) {
            new Person(i).start();
        }
    }
}
View Code

 

第0位, 上了0分钟
第0位, 上了1分钟
第0位, 上了2分钟
第0位, 上了3分钟
第2位, 上了0分钟
第2位, 上了1分钟
第2位, 上了2分钟
第1位, 上了0分钟
第1位, 上了1分钟
第1位, 上了2分钟
第1位, 上了3分钟
第3位, 上了0分钟
第3位, 上了1分钟
第3位, 上了2分钟

 

未加锁不同步情况:一个人本来要连续上3分钟,结果上了1分钟就出来了。第二个人就进去了,本来要上连续5分钟,结果2分钟就出来了。。。直到结束

第1位, 上了0分钟
第3位, 上了0分钟
第0位, 上了0分钟
第2位, 上了0分钟
第0位, 上了1分钟
第3位, 上了1分钟
第0位, 上了2分钟
第2位, 上了1分钟
第0位, 上了3分钟
第3位, 上了2分钟

 

Java线程同步

标签:

原文地址:http://www.cnblogs.com/ji84899/p/4950708.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!