1.同步代码块 在代码块上“synchronized”关键字,则此代码块就称为同步代码块 2.同步代码块格式 synchronized(同步对象){ 需要同步的代码; } 3.同步方法 除了代码块可以同步,方法也是可以同步的 4.方法同步格式 synchronized void 方法名称(){}
//没加同步的时候public class MyThread implements Runnable{ PRivate int ticket=5; public void run(){ for(int i=0;i<10;i++){ System.out.println("车票:"+ticket--); } }}//测试public class ThreadTest{ public static void main(String[] args){ MyThread mt=new MyThread(); Thread t1=new Thread(mt); Thread t2=new Thread(mt); Thread t3=new Thread(mt); t1.start(); t2.start(); t3.start(); }}//加同步代码块之后public class MyThread implements Runnable{ private int ticket=5; public void run(){ for(int i=0;i<10;i++){ synchronized(this){ if(ticket > 0){ try{ Thread.sleep(1000); }catch(InterruptedException e){ e.printStackTrace(); } System.out.println("车票:"+ticket--); } } } }}//加同步方法public void run(){ for(int i=0;i<10;i++){ tell(); }}public synchonized void tell(){ if(ticket > 0){ try{ Thread.sleep(500); }catch(InterruptedException e){ e.printStackTrace(); } System.out.println("车票:"+ticket--); }} suspend()线程暂时挂起, resume()线程恢复运行, wait()暂停 此三个方法容易引起死锁
新闻热点
疑难解答