虽然做java已经两年多了,但说真的对java中所谓的线程同步异步这类的东东还真不是非常的了解,由于最近在研究android上的游戏开发,看到一个游戏demo里到处都充斥着 synchronized这个关键字,而且由于在游戏开发中对线程的使用十分多,所以便写下了这些东东(高手直接忽略就可以了)。
若有幸被高手看到了这篇博文,如果有错误的话请指出,不胜感激。
关于synchronized关键字我自己写了个测试程序运行了一下,具体情况如下:
先把测试代码贴上来看看:
测试代码1:
测试代码2:
运行Sync的结果如下:
运行结果1
从上面的运行结果来看,线程A、B、C、D都是逐个运行的,只不过这四个线程在运行过程中出现了对系统资源的竞争(我是这么理解的),所以导致了上面的情况发生(比如线程A运行了两步然后线程D又运行了三步,我认为这种情况是线程之间对系统资源的竞争引起的),但有一个地方是可以看出来的,线程A、B、C、D并没有同时开始运行,莫非这就是所谓的互斥?
将TxtThread类的run方法中的代码去掉synchronized包裹层去掉,运行结果如下
运行结果2
从上面的运行结果来看,线程A、B、C、D是同时开始运行的,莫非这就是所谓的同步访问?
下面的内容引用自http://java.chinaitlab.com/base/818583.html
从上面引用的内容来看,当测试程序中的TxtThread中的synchronized没有被删除的时候,相当于4个线程(A、B、C、D)同时访问了一个对象的同步方法,那么当线程A、B、C、D全部执行start方法时,它们应该是首先对系统资源进行竞争获得运行时间然后占用TxtThread的run方法中的同步语句块部分,直到某个线程运行完成之后才能允许下一个线程,这样理解的话感觉跟上面的运行结果1不结果不一样,我看了一下资料,我们在TxtThread的run方法中只是对部分关键代码进行了同步,也就是说不同的线程还是可以同时访问TxtThread方法中的run方法的,如果我们将TxtTHread的run方法中的内容写入到另外一个方法runtest()方法中,并将runtest()方法使用synchronized函数进行修饰并将其放到TxtThread的run方法中调用,那么我们就会看到下面的运行效果了,
这样就符合引用内容中的第一条所说的情况了
分享到:
相关推荐
java同步synchronized关键字用法示例
java多线程中synchronized关键字的用法 解压密码 www.jiangyea.com
synchronized关键字在java中的重要性 以及常用的方法 还有它的详解
主要介绍了Java中synchronized关键字的用法,针对synchronized修饰方法的使用作出了简单讲解和演示,需要的朋友可以参考下
java基本教程之synchronized关键字java多线程教程共19页.pdf.zip
实例解析Java中的synchronized关键字与线程平安问题_.docx
java synchronized关键字原理、自定义一把锁来实现同步等
【ASP.NET编程知识】实例解析Java中的synchronized关键字与线程安全问题.docx
Java的synchronized关键字用来进行线程同步操作,然而这在使用中经常会遇到一些问题,这里我们就来详解Java中synchronized关键字的死锁和内存占用问题:
Java多线程synchronized关键字详解(六)共5页.pdf.zip
java的线程同步机制synchronized关键字的理解_.docx
Synchronized关键字的用法
synchronized关键字是JAVA中常用的同步功能,提供了简单易用的锁功能。这篇文章主要介绍了Java中synchronized关键字引出的多种锁问题,需要的朋友可以参考下
【Java并发编程】Synchronized关键字实现原理.doc
Lock接口与synchronized关键字在Java并发编程中都是用于实现同步机制的重要工具,但它们在使用方式、功能特性以及灵活性等方面存在一些显著的差异。 首先,从使用方式上来看,synchronized是Java语言内置的关键字,...
synchronized可以用来同步静态和非静态方法,下面就具体来看一下Java中synchronized关键字修饰方法同步的用法详解:
Java并发编程---synchronized关键
线程安全,使用synchronized关键字
Java 中多线程的同步依靠的是对象锁机制,synchronized关键字就是利用了封装对象锁来实现对共享资源的互斥访问。下面这篇文章主要介绍了java线程与synchronized关键字的相关资料,需要的朋友可以参考下。