java中线程sleep和加锁synchronized 关键字的一些区别
2011-04-15 23:55
495 查看
第一种代码:没有synchronized
加上synchronized
第二种
注意比较第一种和第二种输出结果上的区别
特别是第二种 在创建线程类的时候是创建两个线程
而第一种 在创建线程类的时候创建一个
public class ThreadTest1Test { //main函数 public static void main(String[] args) { ThreadTest2 r = new ThreadTest2(); Thread t1 = new Thread(r); Thread t2 = new Thread(r); t1.start(); t2.start(); } } //线程函数 public class ThreadTest2 implements Runnable { private static int temp = 0; public void run() { this.add(); } public void add() { temp++; try { Thread.sleep(10); } catch (InterruptedException e) { } System.out.println(Thread.currentThread().getName() + " " + temp); } } //此时输出的结果是 //Thread-1 2 //Thread-0 2
加上synchronized
public class ThreadTest1Test { //main方法 public static void main(String[] args) { ThreadTest2 r = new ThreadTest2(); Thread t1 = new Thread(r); Thread t2 = new Thread(r); t1.start(); t2.start(); } } public class ThreadTest2 implements Runnable {//线程函数 private static int temp = 0; public void run() { this.add(); } public synchronized void add() { temp++; try { Thread.sleep(10); } catch (InterruptedException e) { } System.out.println(Thread.currentThread().getName() + " " + temp); } } //结果为 //Thread-1 1 //Thread-0 2
第二种
public class ThreadTest1Test { //main方法 public static void main(String[] args) { Thread t1 = new Thread(new ThreadTest2()); Thread t2 = new Thread(new ThreadTest2()); t1.start(); t2.start(); } } public class ThreadTest2 implements Runnable {//线程函数 private static int temp = 0; public void run() { this.add(); } public synchronized void add() { temp++; try { Thread.sleep(10); } catch (InterruptedException e) { } System.out.println(Thread.currentThread().getName() + " " + temp); } } //输出的结果 //Thread-0 2 //Thread-1 2
注意比较第一种和第二种输出结果上的区别
特别是第二种 在创建线程类的时候是创建两个线程
而第一种 在创建线程类的时候创建一个
相关文章推荐
- 精炼的Java线程Sleep,yield,wait,notify,Synchronized
- 谈谈java线程锁synchronized关键字和volatile关键字
- Java线程同步机制synchronized关键字的理解
- Java Thread(线程)案例详解sleep和wait的区别
- java线程中sleep()与wait()的区别?
- Java - 线程的sleep()方法和yield()方法有什么区别?
- 实例解析Java中的synchronized关键字与线程安全问题
- java线程之yield(),sleep(),wait()区别详解
- Java线程中sleep(),wait(),notifyAll()的区别
- Java线程中sleep和wait的区别
- java线程中yield(),sleep(),wait()区别详解
- java线程的sleep(),wait(),notify(),yield()方法的区别要点
- JAVA线程sleep与wait区别
- Java线程同步中关键字synchronized详述
- Java线程中sleep()、wait()和notify()和notifyAll()、suspend和resume()、yield()、join()、interrupt()的用法和区别
- Java线程中sleep和wait的区别详细介绍
- java线程同步的三种方法[synchronized关键字,Lock加锁,信号量Semaphore]
- Java 关键字volatile 与 synchronized 作用与区别
- JAVA线程安全之synchronized关键字的正确用法
- java-线程的sleep(),wait(),notify(),yield()方法的区别