标签:
多线程同步
为什么要引入同步机制
在多线程环境中,可能会有两个甚至更多的线程试图同时访问一个有限的资源。必须对这种潜在资源冲突进行预防。
解决方法:在线程使用一个资源时为其加锁即可。访问资源的第一个线程为其加上锁以后,其他线程便不能再使用那个资源,除非被解锁。
关于成员变量与局部变量: 如果一个变量是成员变量, 那么多个线程对同一个对象的成员变量进行操作时,他们对该成员变量是彼此影响的( 也就是说一个线程对成
员变量的改变会影响到另一个线程)。
如果一个变量是局部变量,那么每个线程都会有一个该局部变量的拷贝,一个线程对该局部变量的改变不会影响到其他的线程。
成员变量
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
标签:
原文地址:http://www.cnblogs.com/winner-0715/p/5398646.html