`
lionlx
  • 浏览: 283064 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

对字符串加同步锁的例子

阅读更多
很多时候在使用synchronized时,很多的文章都会讲对静态类,对象加同步,但这样会很影响程序的执行效率,并发数也会因此减少,所以要想办法减小synchronized影响的代码量,缩小同步的范围,下面的对字符串常量池加锁是我比较常用的方式。(理解需求,对需要同步的进行同步)
package thread;

class Runner implements Runnable {

	private String name;
	private String[] bar;
	public Runner(String name,String[] bar) {
		super();
		this.name = name;
		this.bar = bar;
	}

	@Override
	public void run() {
		try {
			//需要取的次数
			for(String b:bar) {
				//对bar加锁
				synchronized(b) {
//				//synchronized((b+"").intern()) {
					System.out.println(name+ " : Go!!: " + b.hashCode());
					Thread.sleep(3000);
					System.out.println(name+ " : 完成: " + b.hashCode());
				}
			}
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}

public class Race {
	public static void main(String[] args) {

		String[] str1={"1","2"};
		String[] str2={"1","2"};
		String[] str3={"2","1"};
//		String str1=String.valueOf((new Random()).nextInt(2));
		
		//一共多少Runner		
        new Thread(new Runner("1",str1)).start();
		new Thread(new Runner("2",str2)).start();
		new Thread(new Runner("3",str3)).start();	
     }
}



如果字符串没有在常量池中需要用intern方法,将其放入常量池中。

当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(该对象由 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并且返回此 String 对象的引用。
分享到:
评论

相关推荐

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    varchar2 1~4000字节 可变长度字符串,与CHAR类型相比,使用VARCHAR2可以节省磁盘空间,但查询效率没有char类型高 数值类型 Number(m,n) m(1~38) n(-84~127) 可以存储正数、负数、零、定点数和精度为38位的浮点数...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例073 根据标点符号对字符串进行分行 92 实例074 将字符串的每个字符进行倒序输出 94 实例075 获取字符串中汉字的个数 94 实例076 批量替换某一类字符串 95 实例077 把异常与错误信息显示到窗体中 97 实例078 从...

    进销存系统文档作业例子

    JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变...

    天书夜谈:从汇编语言到Windows内核编程

     第4章 内核字符串与内存 38  4.1 字符串的处理 39  4.1.1 使用字符串结构 39  4.1.2 字符串的初始化 41  4.1.3 字符串的拷贝 42  4.1.4 字符串的连接 42  4.1.5 字符串的打印 43  4.2 内存与链表 45  ...

    天书夜读:从汇编语言到Windows内核编程(完整版 二)

     第4章 内核字符串与内存 38  4.1 字符串的处理 39  4.1.1 使用字符串结构 39  4.1.2 字符串的初始化 41  4.1.3 字符串的拷贝 42  4.1.4 字符串的连接 42  4.1.5 字符串的打印 43  4.2 内存与链表 45  ...

    天书夜读:从汇编语言到Windows内核编程(完整版一)

     第4章 内核字符串与内存 38  4.1 字符串的处理 39  4.1.1 使用字符串结构 39  4.1.2 字符串的初始化 41  4.1.3 字符串的拷贝 42  4.1.4 字符串的连接 42  4.1.5 字符串的打印 43  4.2 内存与链表 45  ...

    windows驱动开发技术详解-part2

     6.1.8 ANSI_STRING字符串与UNICODE_STRING字符串相互转换  6.2 内核模式下的文件操作  6.2.1 文件的创建  6.2.2 文件的打开  6.2.3 获取或修改文件属性  6.2.4 文件的写操作  6.2.5 文件的读操作  ...

    Windows驱动开发技术详解的光盘-part1

     6.1.8 ANSI_STRING字符串与UNICODE_STRING字符串相互转换  6.2 内核模式下的文件操作  6.2.1 文件的创建  6.2.2 文件的打开  6.2.3 获取或修改文件属性  6.2.4 文件的写操作  6.2.5 文件的读操作  ...

    Windows内核安全与驱动开发光盘源码

    2.2.3 字符串 20 2.3 重要的数据结构 21 2.3.1 驱动对象 21 2.3.2 设备对象 22 2.3.3 请求 24 2.4 函数调用 25 2.4.1 查阅帮助 25 2.4.2 帮助中有的几类函数 26 2.4.3 帮助中没有的函数 28 2.5 Windows的...

    Windows内核安全驱动开发(随书光盘)

    2.2.3 字符串 20 2.3 重要的数据结构 21 2.3.1 驱动对象 21 2.3.2 设备对象 22 2.3.3 请求 24 2.4 函数调用 25 2.4.1 查阅帮助 25 2.4.2 帮助中有的几类函数 26 2.4.3 帮助中没有的函数 28 2.5 Windows的...

    中文简体压缩软件RAR 6.0

    在 e:\text 目录下的 rar 压缩文件中搜索十六进制字符串 f0 e0 ae ae ab 2d 83 e3 a9。 k 锁定压缩文件。任何试图改变压缩文件的命令都会被忽略。 例子: rar k final.rar l[t,b] 压缩文件的...

    Java范例开发大全 (源程序)

     实例42 字符串索引越界异常(StringIndexOutBounds) 60  实例43 操作错误(UnsupportedOperationException) 60  4.2 运行时异常 61  实例44 找不到指定类时发生的异常(ClassNotFoundException) 62  ...

    java范例开发大全(pdf&源码)

    实例42 字符串索引越界异常(StringIndexOutBounds) 60 实例43 操作错误(UnsupportedOperationException) 60 4.2 运行时异常 61 实例44 找不到指定类时发生的异常(ClassNotFoundException) 62 实例45 请求的...

    java范例开发大全源代码

     实例42 字符串索引越界异常(StringIndexOutBounds) 60  实例43 操作错误(UnsupportedOperationException) 60  4.2 运行时异常 61  实例44 找不到指定类时发生的异常(ClassNotFoundException) 62 ...

    java范例开发大全

    实例42 字符串索引越界异常(StringIndexOutBounds) 60 实例43 操作错误(UnsupportedOperationException) 60 4.2 运行时异常 61 实例44 找不到指定类时发生的异常(ClassNotFoundException) 62 实例45 请求的...

    java jdk实列宝典 光盘源代码

    判断一个字符串是否是合法的java标识符;使用StringBuffer;IP地址转化成整数,整数转化成IP地址; 十八为身份证格式验证;表达式解析器;字符串编码的转换;字符串对齐器;密码加密和验证(MD5); 制作命令行程序...

Global site tag (gtag.js) - Google Analytics