`
cyril0513
  • 浏览: 15752 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

<<java并发编程实践>>读书笔记之类功能扩展

阅读更多

public class Test {

	public List<String> lists = Collections
			.synchronizedList(new ArrayList<String>());
    //使用不同的锁策略,导致数据出现混乱
	public synchronized boolean listIfAbsent(String str) {
		boolean ifAbsent = lists.contains(str);
		if (!ifAbsent) {
			lists.add(str);
		}
		return ifAbsent;
	}
    //使用同一个锁策略,保证数据的正确性
	public boolean listIfAbsent1(String str) {
		synchronized (lists) {
			boolean ifAbsent = lists.contains(str);
			if (!ifAbsent) {
				lists.add(str);
			}
			return ifAbsent;
		}

	}

	public static void main(String[] args) {
		final Test t = new Test();
		new Thread() {
			public void run() {
				//该线程正在对list最修改
				if (!t.lists.contains("a")) {
					t.lists.add("a");
				}
				if (!t.lists.contains("b")) {
					t.lists.add("b");
				}
				// t.lists.set(0, "chenliang");
				System.out.println(t.lists);
			}
		}.start();

		t.listIfAbsent1("a");
		// t.listIfAbsent("b");

	}
}


从这代码中,我们会发现将线程安全委托给Collections的synronized也是不可行的。
因为他们使用的不同的锁策略,进一步的说就是listIfAbsent方法使用的Test这个对象锁。
而我们无法控制共有的 List<String> lists 不被其他的线程访问,并且进行修改。
所以在写代码的时候一定要考虑清楚,否则会出现很严重的问题。
分享到:
评论

相关推荐

    java在线视频学习系统,带有笔记功能和小组讨论功能,mysql数据库配置

    Java在线视频学习系统是一种以Java技术为基础开发的教育平台,旨在提供便捷的在线学习体验,同时结合了笔记功能和小组讨论功能,以增强用户的学习互动和效率。下面将详细阐述这个系统的各个关键知识点: 1. **Java...

    java笔记 Java-Web笔记 J2EE三大框架笔记

    多线程和IO流则涉及并发编程和数据读写,对于高性能的Web应用至关重要。 其次,Java-Web笔记进一步讲解了Servlet、JSP、过滤器、监听器等Java Web开发的核心技术。Servlet是Java Web应用的基础,用于接收和响应HTTP...

    18天java笔记(txt版)

    Java编程语言是世界上最流行的编程语言之一,尤其在企业级应用开发中占据主导地位。这份"18天Java笔记"提供了一个快速学习Java的核心内容精华,适合初学者和有一定经验的开发者进行回顾和巩固。txt版的格式使得笔记...

    达内core_java学习笔记

    Java是世界上最流行的编程语言之一,尤其在企业级应用开发领域占据主导地位。"Core Java"是Java编程的基础,涵盖了Java语言的核心概念和技术。本篇笔记主要针对初学者,旨在帮助他们掌握Core Java的关键知识点。 一...

    面向对象程序设计Java听课笔记

    面向对象程序设计是计算机科学中的核心概念之一,Java语言作为其典型代表,广泛应用于软件开发。浙江大学翁恺老师的Java视频课程深入浅出地讲解了这一主题,这些笔记旨在帮助我们回顾和巩固Java开发的关键知识。 1....

    java核心技术学习技术笔记

    11. 反射:反射是Java的一项强大功能,它允许程序在运行时动态地获取类的信息并操作类的对象,如创建对象、调用方法、访问字段等,常用于框架开发和元编程。 以上是Java核心技术的部分详解,学习Java不仅要理解这些...

    java学习笔记.rar

    Java编程语言是面向对象的、跨平台的编程语言,由Sun Microsystems(现为Oracle Corporation的一部分)于1995年发布。...通过深入学习和实践,你将能够驾驭这个强大且广泛应用的语言,开启你的Java编程之旅。

    黑马基础笔记java就业班

    以上只是Java基础知识的一部分,深入学习还包括枚举、内部类、Lambda表达式、模块化系统(Jigsaw)、并发编程、JVM内存模型等多个方面。通过不断学习和实践,你可以成为一名熟练的Java开发者,实现“JAVA的梦想”。

    java达内学习笔记

    Java是世界上最流行的编程语言之一,尤其在企业级应用开发领域占据主导地位。"java达内学习笔记"提供了针对初学者的教程资源,旨在帮助新手快速掌握Java编程的基础知识和技能。达内教育是一家知名的IT培训机构,其...

    java笔记

    Java编程语言是信息技术领域中最广泛使用的编程语言之一,尤其在企业级应用开发中占据着核心地位。本笔记将深入探讨Java的关键概念和技术,帮助你掌握这个强大的编程工具。 1. **Java简介** Java是由Sun ...

    张龙老师Java SE课堂笔记和文档

    12. **编程规范与最佳实践**:良好的编程习惯和遵循Java编程规范可以使代码更易读、易懂,减少出错的可能性。 通过张龙老师的Java SE课堂笔记,学习者不仅可以理解Java语言的基本语法,还能掌握面向对象设计原则和...

    java学习笔记初学者可以参考

    Java程序能够在运行时加载新的类和功能,使得程序能够灵活应对各种变化,如服务的升级和扩展。这种动态加载的能力为程序员提供了极大的便利,让他们能够更加迅速地响应新需求。 在安全性方面,Java的设计者们充分...

    JAVA学习笔记(全面)

    ### JAVA学习笔记(全面) #### 一、Java技术基础 ##### 1.1 编程语言 ...以上内容只是Java学习笔记的一个概述,深入理解和掌握这些知识点需要不断地实践和探索。希望这份笔记能够为初学者提供一个良好的起点。

    Java学习笔记JDK6课件和课本代码

    Java是世界上最流行的编程语言之一,尤其在企业级应用开发领域占据主导地位。JDK(Java Development Kit)是Java开发的核心工具集,包含了编译器、Java运行环境、调试器以及各种实用工具。JDK 6是Java的一个重要版本...

    Java架构面试专题汇总(含答案)和学习笔记.rar

    `编程之法++面试和算法心得.pdf`可能包含了一些算法和数据结构的问题,这是面试中的常见部分,能够展现你的逻辑思维和问题解决能力。理解基本的排序算法、搜索算法、图论和动态规划等概念是必要的。 综上所述,这个...

    java网络编程TCP 多线程连接例子

    Java网络编程是开发分布式应用程序的关键技术之一,TCP(Transmission Control Protocol)作为一种面向连接的、可靠的传输协议,被广泛用于确保数据的准确无损传输。在这个例子中,我们将深入理解如何在Java中实现...

Global site tag (gtag.js) - Google Analytics