Java语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。
多线程同步执行时遇到的问题:
代码:
1 class Test{ 2 public static void main(String args []){ 3 MyThread myThread = new MyThread(); 4 Thread t1 = new Thread(myThread); 5 Thread t2 = new Thread(myThread); 6 t1.setName("线程a"); 7 t2.setName("线程b"); 8 t1.start(); 9 t2.start(); 10 } 11 }
class MyThread implements Runnable{ int i = 10; public void run(){ while(true){ System.out.println(Thread.currentThread().getName() + i); i--; Thread.yield(); if(i < 0 ){ break; } } } }
执行结果:
解决方法:
在MyThread实现类中添加synchronized关键字
class MyThread implements Runnable{ int i = 10; public void run(){ synchronized(this){ while(true){ System.out.println(Thread.currentThread().getName() + i); i--; Thread.yield(); if(i < 0 ){ break; } } } } }
执行结果: