你的位置:首页 > 软件开发 > Java > java多线程中synchronize锁的使用和学习,Thread多线程学习(二)

java多线程中synchronize锁的使用和学习,Thread多线程学习(二)

发布时间:2016-11-29 13:00:32
synchronize我的理解是为了保证程序中的原子性和一致性,即当你有两个线程同时操作一段代码的时候,要让这段代码的执行是在任何状态下都是正确的,首先要保证synchronize的使用要对同一个对象和同一把锁使用。 [java] view plain copy ...

synchronize我的理解是为了保证程序中的原子性和一致性,即当你有两个线程同时操作一段代码的时候,要让这段代码的执行是在任何状态下都是正确的,首先要保证synchronize的使用要对同一个对象和同一把锁使用。

 

[java] view plain copy 
  1. <span style="font-size:14px;">public class TraditionalThreadSynchronized {  
  2.       
  3.       
  4.     public static void main(String[] args) {  
  5.         TraditionalThreadSynchronized test =new TraditionalThreadSynchronized();  
  6.         test.init();//创建同一个对象  
  7.     }  
  8.   
  9.     private void init(){  
  10.         OutPuter outPuter =new OutPuter();  
  11.         new Thread(new Runnable() {  
  12.             @Override  
  13.             public void run() {  
  14.                 try {  
  15.                     while(true){  
  16.                         Thread.sleep(10);  
  17.                         outPuter.outer("abcdefg");  
  18.                     }  
  19.                 } catch (InterruptedException e) {  
  20.                     e.printStackTrace();  
  21.                 }  
  22.             }  
  23.         }).start();//线程1  
  24.         new Thread(new Runnable() {  
  25.             @Override  
  26.             public void run() {  
  27.                 try {  
  28.                     while(true){  
  29.                         Thread.sleep(10);  
  30.                         outPuter.outer("123456789");  
  31.                     }  
  32.                 } catch (InterruptedException e) {  
  33.                     e.printStackTrace();  
  34.                 }  
  35.             }  
  36.         }).start();//线程2  
  37.     }  
  38.     class OutPuter {  
  39.         public synchronized void outer(String name) {  
  40.                 for(int i = 0;i<name.length();i++){  
  41.                     System.out.print(name.charAt(i));  
  42.                 }  
  43.                 System.out.println();  
  44.         }  
  45.     }  
  46. }</span>  
  1. <span style="font-size:14px;">  class OutPuter {  
  2.         public void outer(String name) {  
  3.                 synchronized (name) {  
  4.                     for(int i = 0;i<name.length();i++){  
  5.                         System.out.print(name.charAt(i));  
  6.                     }  
  7.                     System.out.println();  
  8.                 }  
  9.         }  
  10.     }</span>  
  1. <span style="font-size:14px;">class OutPuter {  
  2.         public void outer(String name) {  
  3.                 synchronized (this) {//或者创建一个新的锁把,this换成锁也可以,此处的this指的是outer这个对象  
  4.                     for(int i = 0;i<name.length();i++){  
  5.                         System.out.print(name.charAt(i));  
  6.                     }  
  7.                     System.out.println();  
  8.                 }  
  9.         }  
  10.     }</span>  
  1. class OutPuter {  
  2.         public synchronized void outer(String name) {  
  3.                     for(int i = 0;i<name.length();i++){  
  4.                         System.out.print(name.charAt(i));  
  5.                     }  
  6.                     System.out.println();  
  7.         }  
  8.     }  
  1. class OutPuter {  
  2.     public  void outer(String name) {  
  3.         synchronized (this) {  
  4.             for(int i = 0;i<name.length();i++){  
  5.                 System.out.print(name.charAt(i));  
  6.             }  
  7.             System.out.println();  
  8.         }  
  9.     }  
  10.     public synchronized void outer2(String name) {  
  11.             for(int i = 0;i<name.length();i++){  
  12.                 System.out.print(name.charAt(i));  
  13.             }  
  14.             System.out.println();  
  15.     }  
  16. span style="font-size:14px;">   }</span>  
  1. public static synchronized void outer3(String name) {  
  2.         for(int i = 0;i<name.length();i++){  
  3.             System.out.print(name.charAt(i));  
  4.         }  
  5.         System.out.println();  
  6. span style="font-size:14px;">   }</span>  

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:java多线程中synchronize锁的使用和学习,Thread多线程学习(二)

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。