java基础---->多线程之synchronized(六)
这里学习一下java多线程中的关于synchronized的用法。我来不及认真地年轻,待明白过来时,只能选择认真地老去。
synchronized的简单实例
一、 synchronized在方法上的使用
- public class SynchronizedTest {
- public static void main(String[] args) {
- MyThreadB threadB = new MyThreadB();
- new Thread(threadB, "T-1").start();
- new Thread(threadB, "T-2").start();
- }
- static class MyThreadB implements Runnable {
- @Override
- public void run() {
- System.out.println(Thread.currentThread().getName() + " before");
- printString();
- System.out.println(Thread.currentThread().getName() + " after");
- }
- private synchronized void printString() {
- for (int i = 0; i < 3; i++) {
- try {
- TimeUnit.SECONDS.sleep(i + 1);
- System.out.println(Thread.currentThread().getName() + " , i = " + i);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- }
- }
运行的一次结果如下:
- T- before
- T- before
- T- , i =
- T- , i =
- T- , i =
- T- after
- T- , i =
- T- , i =
- T- , i =
- T- after
如果去掉synchronized之后,一次的打印结果如下:
- T- before
- T- before
- T- , i =
- T- , i =
- T- , i =
- T- , i =
- T- , i =
- T- after
- T- , i =
- T- after
二、synchronized代码块的使用
- public class SynchronizedTest {
- public static void main(String[] args) {
- MyThreadA threadA = new MyThreadA();
- new Thread(threadA, "T-1").start();
- new Thread(threadA, "T-2").start();
- }
- static class MyThreadA implements Runnable {
- @Override
- public void run() {
- System.out.println(Thread.currentThread().getName() + " outside of synchronized.");
- synchronized (this) {
- for (int i = 0; i < 3; i++) {
- try {
- TimeUnit.SECONDS.sleep(i + 1);
- System.out.println(Thread.currentThread().getName() + " , i = " + i);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- }
- }
- }
一次的运行结果如下:
- T- outside of synchronized.
- T- outside of synchronized.
- T- , i =
- T- , i =
- T- , i =
- T- , i =
- T- , i =
- T- , i =
如果去掉synchronized之后,一次的打印结果如下:
- T- outside of synchronized.
- T- outside of synchronized.
- T- , i =
- T- , i =
- T- , i =
- T- , i =
- T- , i =
- T- , i =
友情链接
java基础---->多线程之synchronized(六)的更多相关文章
- java基础---->多线程之wait和notify(八)
这里学习一下java多线程中的关于wait方法和notify方法的用法.命运不是风,来回吹,命运是大地,走到哪你都在命运中. wait和notify方法的使用 一.wait与notify的简单实例 i ...
- java基础---->多线程之Runnable(一)
java线程的创建有两种方式,这里我们通过简单的实例来学习一下.一切都明明白白,但我们仍匆匆错过,因为你相信命运,因为我怀疑生活. java中多线程的创建 一.通过继承Thread类来创建多线程 pu ...
- java基础---->多线程之ThreadLocal(七)
这里学习一下java多线程中的关于ThreadLocal的用法.人时已尽,人世还长,我在中间,应该休息. ThreadLocal的简单实例 一.ThreadLocal的简单使用 package com ...
- java基础---->多线程之interrupt(九)
这里我们通过实例来学习一下java多线程中关于interrupt方法的一些知识.执者失之.我想当一个诗人的时候,我就失去了诗,我想当一个人的时候,我就失去了我自己.在你什么也不想要的时候,一切如期而来 ...
- java基础---->多线程之yield(三)
yield方法的作用是放弃当前的CPU资源,将它让给其它的任务去占用CPU执行时间.但放弃的时间不确定,有可能刚刚放弃,马上又获得CPU时间片.今天我们通过实例来学习一下yield()方法的使用.最是 ...
- java基础---->多线程之Daemon(五)
在java线程中有两种线程,一种是用户线程,另一种是守护线程.守护线程是一种特殊的线程,当进程中不存在非守护线程了,则守护线程自动销毁.今天我们通过实例来学习一下java中关于守护线程的知识.我是个平 ...
- java基础---->多线程之priority(四)
线程的priority能告诉调度程序其重要性如何,今天我们通过实例来学习一下java多线程中的关于优先级的知识.我从没被谁知道,所以也没被谁忘记.在别人的回忆中生活,并不是我的目的. java多线程的 ...
- Java多线程之synchronized和volatile
概述 用Java来开发多线程程序变得越来越常见,虽然Java提供了并发包来简化多线程程序的编写,但是我们有必要深入研究一下,才能更好的掌握这块知识. 本文主要对Java提供的底层原语synchroni ...
- (二)java多线程之synchronized
本人邮箱: kco1989@qq.com 欢迎转载,转载请注明网址 http://blog.csdn.net/tianshi_kco github: https://github.com/kco198 ...
随机推荐
- 【WPF/C#】拖拽Image图片控件
需求:使得Image图片控件能够被拖动. 思路:关键是重写Image控件的几个鼠标事件,实现控制. 前台: <Image Source="C:\Users\Administrator\ ...
- Eclipse 中 Debug 模式跳转到 exitCurrentThread 的问题解决
问题描述: Debug 模式启动项目,断点跳转到exitCurrentThread 解决方法: 修改Eclipse 配置 [window]->[Preferences]->[Java]-& ...
- 【SpringMVC笔记】第四课 注解的处理器映射器和处理器适配器使用
一.注意点: 版本问题 spring3.2以前的版本,注解的映射器和适配器使用以下两个类. org.springframework.web.servlet.mvc.annotation.Default ...
- javascript 图片滚动
<div style="width:9999px;"> <ul id="marquePic1_1"> <li> <dl ...
- yarn 用户导致的被挖矿 启用Kerberos认证功能,禁止匿名访问修改8088端口
用户为dr.who,问下内部使用人员,都没有任务在跑: 结论: 恭喜你,你中毒了,攻击者利用Hadoop Yarn资源管理系统REST API未授权漏洞对服务器进行攻击,攻击者可以在未授权的情况下远程 ...
- JavaScript:DOM操作
一.DOM基础DOM(Document Object Model)即文档对象模型,针对HTML和XML文档的API(应用程序接口).DOM描绘了一个层次化的节点树,运行开发人员添加.移除和修改页面的某 ...
- WPF教程二:布局之StackPanel面板
应用程序界面设计中,合理的元素布局至关重要,它可以方便用户使用,并将信息清晰合理地展现给用户.WPF提供了一套功能强大的工具-面板(Panel),来控制用户界面的布局.你可以使用这些面板控件来排布元素 ...
- 第三百一十四节,Django框架,自定义分页
第三百一十四节,Django框架,自定义分页 自定义分页模块 #!/usr/bin/env python #coding:utf-8 from django.utils.safestring impo ...
- python中使用@property
class Student(object): @property def score(self): return self._score @score.setter def score(self, v ...
- php jquery pjax示例源码 (ajax请求,并改变url)
下载地址: http://files.cnblogs.com/files/gaocong/jquery_pjax.rar