对于线程安全问题,是由于线程对内存、数据的共享引发,采用synchronized关键字标记针对共享资源的 *** 作;同步方法、同步块。同步代码块:
格式:
synchronized (object) {代码块}
public class SynBlockThread { public static void main(String [] args) { SynSellThread t=new SynSellThread(); new Thread(t).start(); new Thread(t).start(); new Thread(t).start(); new Thread(t).start(); }//end main } class SynSellThread implements Runnable { private int tickets=100; String str= ""; public void run() { while(true) { try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } synchronized(str) { if(tickets>0) { String result=Thread.currentThread().getName()+" is selling ticket "+tickets; System.out.println(result); tickets--; } }//end synchronized }//end while }//end run }//end class同步方法:
格式:
[访问修饰符] synchronized 返回类型 方法名(参数表) {方法体}
public class SynMethodThread { public static void main(String [] args) { SynMethodSellThread t=new SynMethodSellThread(); new Thread(t).start(); new Thread(t).start(); new Thread(t).start(); new Thread(t).start(); }//end main } class SynMethodSellThread implements Runnable { private int tickets=100; public void run() { while(true) { try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } sale(); } }//end run public synchronized void sale() { if(tickets>0) { String result=Thread.currentThread().getName()+" is selling ticket "+tickets; System.out.println(result); tickets--; } }//end sale }//end class
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)