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

Java多线程2:线程同步

时间:2016-04-16 17:00:47      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

多线程同步

为什么要引入同步机制
在多线程环境中,可能会有两个甚至更多的线程试图同时访问一个有限的资源。必须对这种潜在资源冲突进行预防。
解决方法:在线程使用一个资源时为其加锁即可。访问资源的第一个线程为其加上锁以后,其他线程便不能再使用那个资源,除非被解锁。

关于成员变量与局部变量: 如果一个变量是成员变量, 那么多个线程对同一个对象的成员变量进行操作时,他们对该成员变量是彼此影响的( 也就是说一个线程对成
员变量的改变会影响到另一个线程)。
如果一个变量是局部变量,那么每个线程都会有一个该局部变量的拷贝,一个线程对该局部变量的改变不会影响到其他的线程。

成员变量

public class ThreadTest {
    public static void main(String[] args) {
        Runnable thread = new MyThread();
        Thread t1 = new Thread(thread);
        Thread t2 = new Thread(thread);
        t1.start();
        t2.start();
    }
}

class MyThread implements Runnable {

    int i;

    @Override
    public void run() {

        while (true) {

            System.out.println(Thread.currentThread().getName() + " i = " + i++);

            try {
                Thread.sleep((long) (Math.random() * 1000));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if (10 == i) {
                break;
            }
        }
    }
}

运行结果

Thread-0 i = 0
Thread-1 i = 1
Thread-1 i = 2
Thread-0 i = 3
Thread-1 i = 4
Thread-0 i = 5
Thread-0 i = 6
Thread-0 i = 7
Thread-1 i = 8
Thread-0 i = 9

局部变量

public class ThreadTest {
    public static void main(String[] args) {
        Runnable thread = new MyThread();
        Thread t1 = new Thread(thread);
        Thread t2 = new Thread(thread);
        t1.start();
        t2.start();
    }
}

class MyThread implements Runnable {

    @Override
    public void run() {

        int i = 0;

        while (true) {

            System.out.println(Thread.currentThread().getName() + " i = " + i++);

            try {
                Thread.sleep((long) (Math.random() * 1000));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if (10 == i) {
                break;
            }
        }
    }
}

运行结果

Thread-0 i = 0
Thread-1 i = 0
Thread-0 i = 1
Thread-1 i = 1
Thread-0 i = 2
Thread-1 i = 2
Thread-0 i = 3
Thread-1 i = 3
Thread-0 i = 4
Thread-1 i = 4
Thread-0 i = 5
Thread-0 i = 6
Thread-1 i = 5
Thread-1 i = 6
Thread-0 i = 7
Thread-1 i = 7
Thread-0 i = 8
Thread-0 i = 9
Thread-1 i = 8
Thread-1 i = 9

 

Java多线程2:线程同步

标签:

原文地址:http://www.cnblogs.com/winner-0715/p/5398646.html

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