zoukankan      html  css  js  c++  java
  • (原)测试 Java中Synchronized锁定对象的用法

    今天再android_serial_port中看到了关键字 synchronized;因为刚好在学java和android,所以就查了一下它的用法:

    于是把代码中的一小段代码拿了出来,做了一下修改,测试了下,结果出现的情况:

     1 public class syncThreadDemo {
     2 
     3     public static void main(String[] args) {
     4         // TODO Auto-generated method stub
     5         /*测试1*/
     6 //        Account account = new Account("zhang san", 10000.0f);
     7 //        AccountOperator accountOperator = new AccountOperator(account);
     8 //
     9 //        final int THREAD_NUM = 5;
    10 //        Thread threads[] = new Thread[THREAD_NUM];
    11 //        for (int i = 0; i < THREAD_NUM; i ++) {
    12 //           threads[i] = new Thread(accountOperator, "Thread" + i);
    13 //           threads[i].start();
    14 //        }
    15         
    16         /*测试2*/
    17         
    18         Thread thread1=new Thread(new syncThreadDemo().new SendingThread("send1"),"thread1");
    19         thread1.start();
    20         Thread thread2=new Thread(new syncThreadDemo().new ReceiveThread("recv1"),"thread2");
    21         thread2.start();
    22         
    23     }
    24     /*创建一个内部类来测试synchronized锁定一个对象*/
    25     static Object mByteReceivedBackSemaphore = new Object();
    26 
    27     private class SendingThread implements Runnable{
    28         private int i=0;
    29         private String name;
    30         //创建一个构造函数
    31         public SendingThread(String strName) {
    32             // TODO Auto-generated constructor stub
    33             this.name=strName;
    34         }
    35         
    36         @Override
    37         public void run(){
    38             while (i<10) {
    39                 synchronized (mByteReceivedBackSemaphore) {
    40                     try {
    41                         // Wait for 100ms before sending next byte, or as soon as
    42                         // the sent byte has been read back.
    43                         System.out.println(Thread.currentThread().getName()+": wait");
    44                         mByteReceivedBackSemaphore.wait(100);
    45                         i++;
    46                         System.out.println(Thread.currentThread().getName()+":"+i);
    47                     } 
    48                     catch (Exception e) {
    49                         // TODO: handle exception
    50                     }    
    51                 }
    52             }
    53         }
    54      }
    55 
    56      private class ReceiveThread implements Runnable{
    57         private int j=0;
    58         private String name;
    59         
    60         public ReceiveThread(String strName) {
    61             // TODO Auto-generated constructor stub
    62             this.name=strName;
    63         }
    64         
    65         @Override
    66         public void run(){
    67             while(j<10){
    68                 synchronized(mByteReceivedBackSemaphore){
    69                     System.out.println(Thread.currentThread().getName()+": notify");
    70                     mByteReceivedBackSemaphore.notify();    
    71                     j++;
    72                     System.out.println(Thread.currentThread().getName()+":"+j);
    73                 }
    74             }
    75         }
    76      }
    77 }
    View Code

    测试结果:

    thread1: wait
    thread2: notify
    thread2:1
    thread2: notify
    thread2:2
    thread2: notify
    thread2:3
    thread2: notify
    thread2:4
    thread2: notify
    thread2:5
    thread2: notify
    thread2:6
    thread2: notify
    thread2:7
    thread2: notify
    thread2:8
    thread2: notify
    thread2:9
    thread2: notify
    thread2:10
    thread1:1
    thread1: wait
    thread1:2
    thread1: wait
    thread1:3
    thread1: wait
    thread1:4
    thread1: wait
    thread1:5
    thread1: wait
    thread1:6
    thread1: wait
    thread1:7
    thread1: wait
    thread1:8
    thread1: wait
    thread1:9
    thread1: wait
    thread1:10
    View Code
  • 相关阅读:
    Django ajax 实现 loading 效果
    K8S service 简单介绍
    K8S Pod 生命周期 (二)
    异度之刃 Xenoblade 后感
    Nested Prefab Mode 嵌套预制体 保存问题 Dirty
    GIT速成
    Surface电池阈值
    如何删除通知栏无效图标(重置任务栏通知区域)
    Mouse For Winpad
    Re:LieF ~親愛なるあなたへ~ 后感
  • 原文地址:https://www.cnblogs.com/lihaiping/p/5833270.html
Copyright © 2011-2022 走看看