(原)测试 Java中Synchronized锁定对象的用法
今天再android_serial_port中看到了关键字 synchronized;因为刚好在学java和android,所以就查了一下它的用法:
于是把代码中的一小段代码拿了出来,做了一下修改,测试了下,结果出现的情况:
 public class syncThreadDemo {
     public static void main(String[] args) {
         // TODO Auto-generated method stub
         /*测试1*/
 //        Account account = new Account("zhang san", 10000.0f);
 //        AccountOperator accountOperator = new AccountOperator(account);
 //
 //        final int THREAD_NUM = 5;
 //        Thread threads[] = new Thread[THREAD_NUM];
 //        for (int i = 0; i < THREAD_NUM; i ++) {
 //           threads[i] = new Thread(accountOperator, "Thread" + i);
 //           threads[i].start();
 //        }
         /*测试2*/
         Thread thread1=new Thread(new syncThreadDemo().new SendingThread("send1"),"thread1");
         thread1.start();
         Thread thread2=new Thread(new syncThreadDemo().new ReceiveThread("recv1"),"thread2");
         thread2.start();
     }
     /*创建一个内部类来测试synchronized锁定一个对象*/
     static Object mByteReceivedBackSemaphore = new Object();
     private class SendingThread implements Runnable{
         private int i=0;
         private String name;
         //创建一个构造函数
         public SendingThread(String strName) {
             // TODO Auto-generated constructor stub
             this.name=strName;
         }
         @Override
         public void run(){
             while (i<10) {
                 synchronized (mByteReceivedBackSemaphore) {
                     try {
                         // Wait for 100ms before sending next byte, or as soon as
                         // the sent byte has been read back.
                         System.out.println(Thread.currentThread().getName()+": wait");
                         mByteReceivedBackSemaphore.wait(100);
                         i++;
                         System.out.println(Thread.currentThread().getName()+":"+i);
                     }
                     catch (Exception e) {
                         // TODO: handle exception
                     }
                 }
             }
         }
      }
      private class ReceiveThread implements Runnable{
         private int j=0;
         private String name;
         public ReceiveThread(String strName) {
             // TODO Auto-generated constructor stub
             this.name=strName;
         }
         @Override
         public void run(){
             while(j<10){
                 synchronized(mByteReceivedBackSemaphore){
                     System.out.println(Thread.currentThread().getName()+": notify");
                     mByteReceivedBackSemaphore.notify();
                     j++;
                     System.out.println(Thread.currentThread().getName()+":"+j);
                 }
             }
         }
      }
 }
测试结果:
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
(原)测试 Java中Synchronized锁定对象的用法的更多相关文章
- java中synchronized的用法详解
		
记下来,很重要. Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问同一个对象object中的这个synchron ...
 - java中synchronized的使用方法与具体解释
		
Java语言的keyword.当它用来修饰一个方法或者一个代码块的时候,可以保证在同一时刻最多仅仅有一个线程运行该段代码. 一.当两个并发线程訪问同一个对象object中的这个synchronized ...
 - Java 中 synchronized的用法详解(四种用法)
		
Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码.本文给大家介绍java中 synchronized的用法,对本文感兴趣的朋友一起看看吧 ...
 - java中 synchronized 的使用,确保异步执行某一段代码。
		
最近看了个有关访问网络url和下载的例子,里面有几个synchronized的地方,系统学习下,以下内容很重要,记下来. Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一 ...
 - JAVA 中 synchronized 详解
		
看到一篇关于JAVA中synchronized的用法的详解,觉得不错遂转载之..... 原文地址: http://www.cnblogs.com/GnagWang/archive/2011/02/27 ...
 - Java中synchronized 修饰在static方法和非static方法的区别
		
[问题描述]关于Java中synchronized 用在实例方法和对象方法上面的区别 [问题分析]大家都知道,在Java中,synchronized 是用来表示同步的,我们可以synchronized ...
 - java中对集合对象list的几种循环访问
		
java中对集合对象list的几种循环访问的总结如下 1 经典的for循环 public static void main(String[] args) { List<String> li ...
 - Java中的函数对象
		
初次听说java中的函数对象可能,比较的陌生.可以类比着来理解一下,人们常说java中没有了指针,殊不知,java中的对象引用就是指针,有时候我们说一个对象往往指的就是这个对象的引用,也就是说基本上把 ...
 - (转)java中对集合对象list的几种循环访问总结
		
Java集合的Stack.Queue.Map的遍历 在集合操作中,常常离不开对集合的遍历,对集合遍历一般来说一个foreach就搞定了,但是,对于Stack.Queue.Map类型的遍历,还是有一 ...
 
随机推荐
- 潭州课堂25班:Ph201805201  周五  (课堂笔记)
			
小三角: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
 - only_full_group_by的注意事项
			
only_full_group_by的注意事项 使用这个就是使用和oracle一样的group 规则, select的列都要在group中,或者本身是聚合列(SUM,AVG,MAX,MIN) 才行
 - db2 系统表
			
SYSIBM: 基本系统编目,不建议直接访问SYSCAT: 默认授权给Public组.只读编目视图,一般通过这个来获取编目信息SYSSTAT: 可更新编目视图,会影响优化器的优化策略SYSFUN: 用 ...
 - 可以替代putty的ssh客户端
			
1. Bitvise SSH Client http://www.putty.org/ Bitvise SSH Client is an SSH and SFTP client for Windows ...
 - ALSA学习资料
			
一.内核文档 Linux Sound Subsystem Documentation 二.一些API 1.snd_pcm_period_elapsed 2.snd_pcm_lib_buffer_by ...
 - Cannot generate C# proxy dll with JNI4NET tool, running batch file as trusted assembly?
			
From: https://stackoverflow.com/questions/41042368/cannot-generate-c-sharp-proxy-dll-with-jni4net-to ...
 - InfluxDB源码目录结构解析
			
操作系统 : CentOS7.3.1611_x64 go语言版本:1.8.3 linux/amd64 InfluxDB版本:1.1.0 influxdata主目录结构 [root@localhost ...
 - Linux内核编译与安装
			
2013-04-16 Linux内核介绍 Linux内核是一个用C语言写成的,符合POSIX标准的类Unix操作系统.内核是操作系统中最基本的一部分,提供了众多应用程序访问计算机硬件的机制.L ...
 - Linux下利用backtrace追踪函数调用堆栈以及定位段错误[转]
			
来源:Linux社区 作者:astrotycoon 一般察看函数运行时堆栈的方法是使用GDB(bt命令)之类的外部调试器,但是,有些时候为了分析程序的BUG,(主要针对长时间运行程序的分析),在程序 ...
 - 12C -- ORA-65005: missing or invalid file name pattern for file
			
克隆pdb创建新的pdb的时候遇到了以下的错误,具体过程如下文.数据库版本:12.2.0.1 查看已有pdb的tempfile文件 SQL> select name from v$tempfil ...