`
在水伊方
  • 浏览: 107189 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

黑马程序员-java多线程技术01

阅读更多

       

----------------------android培训java培训、java学习型技术博客、期待与您交流!----------------------

 

        多线程编程是Java基础中一个非常重要的技术,比如我们的PC上运行的各种应用程序以及下载软件等都用到了多线程技术,多线程往往容易产生安全问题,举个例子,假如一个叫张三的人要去银行汇1000元给他老婆,他账户上原先有1200元,正当系统准备从账户上进行汇款时,也即执行1200-1000操作,这时一个叫李四的人给张三汇款来了,李四欠张三300元钱,系统转向处理李四的操作,也即1200+300操作,执行之后又转向张三的汇款动作,及1200-1000,因为程序原先到的数据就是1200,所以现在张三的账户余额是200,而正常情况应该是1200-1000+300=500元,要解决线程同步问题需要用到锁机制,而这个锁可以通俗的理解成洗手间的锁,当一个进入之后,锁上了门,就相当于他拥有了锁,只有当他出来之后(即释放锁),别人才可以进入(即拥有锁),实现锁机制需要用到synchronized关键字,下面是一个简单的打印字符串的示例代码,如果没有锁机制,将会出现中英文交替打印的现象

public class TraditionalThreadSynchronized {
	public static void main(String[] args) {
		new TraditionalThreadSynchronized().init();
	}

	private void init() {
		final Outputer outputer = new Outputer();
		
		new Thread(new Runnable() {

			@Override
			public void run() {
				outputer.outputString("这是一个测试!!!");
			}
		}).start();

		new Thread(new Runnable() {

			@Override
			public void run() {
				outputer.outputString("This is a test!!!");
			}
		}).start();
	}
	
	/*要保证两个方法及两个方法以上的代码同步性,必须用同一个对象作为同步代码块的锁*/
	/*要想实现方法互斥分组,就是通过synchronized(obj)中的obj的不同来完成的*/
	static class Outputer {		
		/*
		 * 也可以把整个方法作为同步代码块
		 * 像这样public synchronized void outputString(String name)
		 */
		public void outputString(String name) {  
			
			while (true) {
				/*非静态方法的同步锁是this对象*/
				synchronized (this) { 
					for (int i = 0; i < name.length(); i++) {
						System.out.print(name.charAt(i));
					}
				}
				System.out.println();
			}
		}
		
		public void outputString2(String name) {
			while (true) {
				/*任何一个对象都可以作为同步代码块的锁*/
				synchronized (new Object()) { 
					for (int i = 0; i < name.length(); i++) {
						System.out.print(name.charAt(i));
					}
				}
				System.out.println();
			}
		}
		
		public static void outputString3(String name) {
			
			while (true) {
				/*静态方法的同步锁是类的字节码对象*/
				synchronized (Outputer.class) { 
					for (int i = 0; i < name.length(); i++) {
						System.out.print(name.charAt(i));
					}
				}
				System.out.println();
			}
		}
	}

}

 

 

----------------------android培训java培训、java学习型技术博客、期待与您交流!----------------------

 

详情请查看:http://edu.csdn.net/heima

1
1
分享到:
评论

相关推荐

    传智播客.黑马程序员《Java 基础入门》课后习题答案

    1、 面向对象、跨平台性、健壮性、安全性、可移植性、多线程性、动态性等。 2、 JRE(Java Runtime Environment,Java 运行时环境),它相当于操作系统部分,提供了 Java 程序运 行时所需要的基本条件和许多 Java ...

    黑马程序员–Java多线程讲解笔记

    当一个进程中线程有多个时,是多线程。  为什么要用多线程  1,让计算机"同时"做多件事情,节约时间。  2,后台运行程序,提高程序的运行效率.。  3,多线程可以让程序"同时"处理多个事情。  4,...

    黑马程序员_张孝祥_Java多线程与并发库 视频+代码+资料

    黑马程序员_张孝祥_Java多线程与并发库,视频+代码+资料

    黑马程序员_张孝祥_Java多线程与并发库

    黑马程序员_张孝祥_Java多线程与并发库,老师讲的非常仔细,老师很有耐心.欢迎大家下载学习.

    图解java多线程设计模式

    java.util.concurrent包、synchronized关键字、Swing框架、Java内存模型等内容也均有涉及,不仅能够了解Java多线程的相关知识,还可加深对Java语言的理解。 本书适合以下读者阅读 a.对多线程感兴趣的人 b.对Java...

    图解java多线程设计模式2017年8月最新版

    264张图表 + 300段Java示例程序 = 轻松学习多线程编程 日本经典多线程入门书,原版长销11年! 本书适合以下读者阅读 a.对多线程感兴趣的人 b.对Java编程感兴趣的人 c.对设计模式感兴趣的人 d.对面向对象开发感兴趣的...

    java拼图游戏源码.zip

    这是一个java写的拼图游戏,用了swing、多线程等知识,可以设置行数列、列数、还有使用多线程写的游戏动画,拼图的图块具有磁贴设计,代码封装性较强,容易移植,纯原创。

    黑马程序员 安卓学院 万元哥项目经理 分享220个代码实例

    |--利用FinalHttp实现多线程断点续传 |--加密之MD5 |--动画Animation详解 |--动画之view左右抖动 |--动画之移动动画 |--动画之组合动画 |--动画之缩放动画ScaleAnimation |--反序列化对象 |--发送短信 读天气 调音量...

    传智播客_Java培训_毕向东_Java基础[05-多线程]

    传智播客_Java培训_毕向东_Java基础[05-多线程]系黑马程序员_毕向东_Java基础视频教程

    java并发库高级应用源码--张孝祥

    java并发库thread使用,传统线程技术、定时器技术、线程互斥技术,同步通讯技术、多线程共享数据、并发库应用,线程锁技术,阻塞锁、阻塞队列,线程池等应用

    《Java基础案例教程(第2版)》课后习题答案1

    第1章 Java开发入门一.填空题1. 面向对象,SUN 2. JavaSE,JavaEE,JavaME3.面向对象、跨平台性、支持多线程4. JDK5.bin

    java7源码-Java-concurrent:Java并发编程

    黑马程序员——Java异步课程源码 plugin Lombok logback.xml 说明 课堂代码主要在 case_java8 子模块内,按章节划分, io.github.hank.java.concurrent.n2 - 同步与异步 io.github.hank.java.concurrent.n3 - Java...

    图解java多线程设计模式 2017年8月最新版

    这本书的pdf文件有162M,是最新版高清的pdf,网上原书售价60多元,这里提供的附件是百度云的链接地址。

    拼图游戏 (源码+所有文件)

    萌新做的一个简单的Java拼图游戏 启动类:pers.sept.jigsaw1.swing下的...多线程。 下拉列表选择数字可以切换关卡图片,最后的“+”,可以添自己的图片到关卡中。 设有背景音乐 有一键通过按钮 等等,块下载去看看吧。

    JAVA核心知识点整理.pdf

    给大家分享一篇我在学习java过程中...包含常见的面试题:JVM、Java集合、多线程并发、java基础、SSM框架原理、微服务、Netty和RPC、网络、日志、算法、数据结构、加密、分布式算法、机器学习、大数据等知识点,都是干货

    百度地图毕业设计源码-Java-Notes:2020Java快速成长学习路线,从0到1的过程,打破你知识的盲区,渐渐爱上Java,我想对还是小

    @学习路线根据黑马程序员学习路线改编 Part1: Java基础&Web基础 Java基础 面向对象思想 集合框架 IO流 多线程与并发 异常处理 网络编程 数据库 MySQL Oracle JDBC C3P0 Druid 前端技术 HTML CSS JavaScript jQuery ...

    学成在线-分布式任务视频处理

    2.适用于黑马程序员Java企业级实战开发《学成在线》微服务项目,基于SpringCloud、SpringCloudAlibaba技术栈开发。 3.采用xxl-job技术。 4.步骤概要: 4.1 作业分片方案 4.2 保证任务不重复执行 4.3 业务流程 5....

    黑马JVM学习笔记二

    title: 黑马JVM学习笔记二 date: 2020-01-13 1:00:00 ...线程是私有的,多线程之间分别有各自的程序计数器记录对应线程的执行位置 程序计数器是Java虚拟机规范中唯一一个不会存在内存溢出的区(堆和栈等会出现内存溢

    黑马乐优商城项目后台管理系统.zip

    多线程支持: Java内置了对多线程的支持,允许程序同时执行多个任务。这对于开发需要高并发性能的应用程序(如服务器端应用、网络应用等)非常重要。 自动内存管理(垃圾回收): Java具有自动内存管理机制,通过...

Global site tag (gtag.js) - Google Analytics