这里学习一下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(六)的更多相关文章

  1. java基础---->多线程之wait和notify(八)

    这里学习一下java多线程中的关于wait方法和notify方法的用法.命运不是风,来回吹,命运是大地,走到哪你都在命运中. wait和notify方法的使用 一.wait与notify的简单实例 i ...

  2. java基础---->多线程之Runnable(一)

    java线程的创建有两种方式,这里我们通过简单的实例来学习一下.一切都明明白白,但我们仍匆匆错过,因为你相信命运,因为我怀疑生活. java中多线程的创建 一.通过继承Thread类来创建多线程 pu ...

  3. java基础---->多线程之ThreadLocal(七)

    这里学习一下java多线程中的关于ThreadLocal的用法.人时已尽,人世还长,我在中间,应该休息. ThreadLocal的简单实例 一.ThreadLocal的简单使用 package com ...

  4. java基础---->多线程之interrupt(九)

    这里我们通过实例来学习一下java多线程中关于interrupt方法的一些知识.执者失之.我想当一个诗人的时候,我就失去了诗,我想当一个人的时候,我就失去了我自己.在你什么也不想要的时候,一切如期而来 ...

  5. java基础---->多线程之yield(三)

    yield方法的作用是放弃当前的CPU资源,将它让给其它的任务去占用CPU执行时间.但放弃的时间不确定,有可能刚刚放弃,马上又获得CPU时间片.今天我们通过实例来学习一下yield()方法的使用.最是 ...

  6. java基础---->多线程之Daemon(五)

    在java线程中有两种线程,一种是用户线程,另一种是守护线程.守护线程是一种特殊的线程,当进程中不存在非守护线程了,则守护线程自动销毁.今天我们通过实例来学习一下java中关于守护线程的知识.我是个平 ...

  7. java基础---->多线程之priority(四)

    线程的priority能告诉调度程序其重要性如何,今天我们通过实例来学习一下java多线程中的关于优先级的知识.我从没被谁知道,所以也没被谁忘记.在别人的回忆中生活,并不是我的目的. java多线程的 ...

  8. Java多线程之synchronized和volatile

    概述 用Java来开发多线程程序变得越来越常见,虽然Java提供了并发包来简化多线程程序的编写,但是我们有必要深入研究一下,才能更好的掌握这块知识. 本文主要对Java提供的底层原语synchroni ...

  9. (二)java多线程之synchronized

    本人邮箱: kco1989@qq.com 欢迎转载,转载请注明网址 http://blog.csdn.net/tianshi_kco github: https://github.com/kco198 ...

随机推荐

  1. mysql按年度、季度、月度、周、日统计查询的sql语句

    本文介绍一些mysql中用于查询的sql语句,包括按年度.季度.月度.周.日统计查询等,有需要的朋友,可以参考下. 一.年度查询 查询 本年度的数据   SELECT * FROM blog_arti ...

  2. 【高可用HA】Apache (2) —— Mac下安装多个Apache Tomcat实例

    Mac 下安装多个Apache Tomcat实例 tomcat版本:tomcat-8.0.29 参考来源: Installing Tomcat 7.0.x on OS X 在mac系统安装Apache ...

  3. linux大小写转换

    [root@ob2 mytmp]# cat aa2.txt|sed 's#[a-z]#\u&#g'ETH0      LINK ENCAP:ETHERNET  HWADDR 00:0C:29: ...

  4. PHP无限极分类 - 3 - 分类目录

    结合zui---Tree组件,实现分类目录. 目录结构同上一篇: 效果: 代码: <!DOCTYPE html> <html lang="en"> < ...

  5. Error -27740: WSA_IO_pending

    Error -27740: WSA_IO_pendingAction.c(198): Error -27791: Server **** has shut down the connection pr ...

  6. opencv3.2 dnn 图像分割

    下载 http://dl.caffe.berkeleyvision.org/fcn32s-heavy-pascal.caffemodel 在opencv_contrib-3.2.0/modules/d ...

  7. 【转】OPenGL MFC绘图

    一.简介 GDI是通过设备句柄(Device Context以下简称"DC")来绘图,而OpenGL则需要绘制环境(Rendering Context,以下简称"RC&q ...

  8. 编译 boost 库(win7+boost1.60+vs2008)

    参见:http://blog.csdn.net/u013074465/article/details/42532527 下载boost安装包 https://sourceforge.net/proje ...

  9. 严格控制GOTO语句

    注意事项 1,使用顺序.选择.循环等有限的基本结构表示程序逻辑. 2,选用的控制结构只准许有一个入口和一个出口 3,程序语句组成容易识别的块,每块只有一个入口和一个出口. 4,复杂结构应该用基本控制结 ...

  10. sixxpack破解的文章!【转】

    星期天闲着没事玩游戏,玩游戏不能无外挂.于是百度了半天,找到了一个,看介绍貌似不错,就下载了下来.一看,竟然是用.net写的,下意识地Reflector了一下.发现竟是一个叫actmp的程序集.如图: ...