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 ...
随机推荐
- 用JS的正则表达式如何判断输入框内为中文或者是英文
1.只能输入数字和英文的: <input onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clip ...
- js学习笔记31----工厂方式
工厂方式构造对象: 1.原料---构造函数,创建一个对象 “构造函数”,就是专门用来生成“对象”的函数.它提供模板,作为对象的基本结构.一个构造函数,可以生成多个对象,这些对象都有相同的结构. 2 ...
- 控件EditText
(一)监听EditText输入内容变化 EditText.addTextChangedListener(textWatcher); //EditText change listener //此方 ...
- 解析xml的4种方法详解
1. 介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许 ...
- android Menu 笔记
菜单是应用中常见的用户组件.本文介绍如何在布局文件和代码中添加menu,submenu以及在代码中添加的方法. 参考链接 https://developer.android.com/guide/top ...
- snmp trap编写
1.MIB库查看net-snmp的安装目录./usr/share/snmp/mibs目录下: NET-SNMP-EXAMPLES-MIB.mib本件部分内容如下: netSnmpExampleHear ...
- html学习笔记五
关于服务端和client的校验问题 上述的表格信息填写后发现,即使有些信息不添,依旧能够提交 所以针对此问题,我们要在client进行数据填写信息的增强型校验(必添单元,必须填写有效信息,否则无法提交 ...
- 《Java程序猿面试笔试宝典》之组合与继承有什么差别
组合和继承是面向对象中两种代码复用的方式. 组合是指在新类里面创建原有类的对象,反复利用已有类的功能.继承是面向对象的主要特性之中的一个,它同意设计人员依据其他类的实现来定义一个类的实现. 组合和继承 ...
- 对phpexcel的若干补充
导出excel属性设置 //Include class require_once('Classes/PHPExcel.php'); require_once('Classes/PHPExcel/Wri ...
- iOS 图片切片的简单实现
图片切片就是将一张图片按一定比例切分,中间部分系统自动填充空白, 这样在文本多行输入的时候,将具有特定形状的图片作为背景, 即使文本行数很多,也不会使图片走形. //即使你按5/5分,还是3/7分系统 ...