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 ...
随机推荐
- linux终端无打印信息的实现
linux启动时会又大量信息打印,若要使启动信息不打印,需修改内核中两处: 1. 内核配置项. CONFIG_SERIAL_ATMEL_CONSOLE=y //去掉终端配置选项.2. 内核解压缩 ...
- Linux下安装rpm出现error: Failed dependencies
在Linux下安装rpm包时经常会遇到下面这个问题: error: Failed dependencies: xxxxxxxxxxxxxxxxxxxxxx 遇到此问题时可以在安装rpm包命令的后面加两 ...
- Swift开发教程--设置UIViewController的背景透明
非常easy的一句代码 self.view.backgroundColor = UIColor.clearColor() 由此联想开来,非常多的控件想设置为背景透明都能够用UIColor.clearC ...
- find 命令一个命令多参数如何使用,????,perm
[root@ob2 mytmp]# find -mtime -7 -type f \( -name "*.html" -o -name "*.tar.gz" \ ...
- 用大白话揭开Ajax长轮询(long polling)的神秘面纱
在看这篇Ajax长轮询之前可以先看看Ajax轮询技术(没有长),有助于理解: Ajax长轮询属于Ajax轮询的升级版,在客户端和服务端都进行了一些改造,使得消耗更低,速度更快. "不间断的通 ...
- JavaScript初学者福利!必须收藏的24条小技巧
JavaScript初学者福利!必须收藏的24条小技巧 前端小编 发布于 2013-12-15 22:52 查看数: 2343 评论数: 6 帖子模式 这篇文章将回顾JavaScript的知识 !如果 ...
- QThread 的使用方法及函数解析
近日,使用QThread,一些问题百思不得其解,看过大牛的文章,恍然大悟啊. 原文 http://hi.baidu.com/dbzhang800/item/c14c97dd15318d17e1f46f ...
- 关于Cocos2d-x中GameController的定义
GameController类是继承自Scheduler(有计时功能)或者Ref(可自动释放)的用户自己定义的一个控制器 如果一个场景有多个层的话,要用GameController,一个GameCon ...
- awk基础命令
1. 命令awk简介 a. awk是一种编程语言,用于对文本和数据进行处理. b.具有强大得文本格式话能力 c.利用命令awk,可以将一些文本整理成需要的格式. d.命令awk是逐行进行处理的 2. ...
- linux 打包 解压 tar zip tgz
.tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)------------------------- ...