`
lionlx
  • 浏览: 285900 次
  • 性别: 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 对象的引用。
分享到:
评论

相关推荐

    java线程同步的例子.pdf

    `synchronized`关键字作用于一个对象(在这个例子中是字符串`str`),它创建了一个监视器或者称为锁。当一个线程进入同步代码块并执行其中的语句时,该线程会获取到`str`对象的锁,其他尝试进入同步代码块的线程会被...

    StringQueue.zip

    在这个例子中,队列可能被配置为存储特定长度的字符串。`xQueueCreate()`函数用于创建一个消息队列。 2. **字符串数据结构**:在Arduino平台上,字符串通常是`String`类的对象,它们可以动态地增长和收缩。在...

    Go语言写入字符串到文件的方法

    在Go语言中,将字符串写入文件是常见的文件操作任务之一。这有助于数据持久化、日志记录或者创建配置文件等。以下将详细介绍如何在Go语言中实现这一功能,并提供相关的编程技巧和注意事项。 首先,我们需要引入两个...

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

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

    C程序经典1000例子

    例子可能涵盖线程创建、同步(互斥锁、信号量等)和通信。 13. **图形编程**:通过特定库(如SDL、OpenGL),可以在C语言中进行图形界面和游戏开发。例子可能涉及窗口创建、颜色填充、图像加载、事件处理等。 14. ...

    linux c下多进程的例子

    进程A(PID为1的进程)向共享内存写入字符串,而进程B则读取并打印该字符串。最后,两个进程都使用`shmdt()`断开与共享内存的连接。 请注意,为了防止资源泄露,通常需要在不再使用共享内存时,使用`shmctl()`函数...

    C语言中级学习者代码例子

    10. **并发编程**:如果例子涉及到多线程或多进程,你可以学习到如何使用pthread库创建和管理线程,以及同步机制(互斥锁、信号量等)。 这些代码实例将有助于你将理论知识转化为实践能力,逐步提升为高级C语言...

    Linux线程管理-线程信号量的使用实例.pdf

    这个例子展示了如何使用线程信号量来同步两个线程的执行,确保在任何时候只有一个线程在处理字符串数组。当输入结束标志"end"时,主线程等待子线程完成并销毁信号量,程序结束。 参考文献《基于项目驱动的嵌入式 ...

    vb.net 29 个例子

    12. **正则表达式**:Regex类的使用,进行字符串的匹配、替换和提取。 13. **反射**:通过Reflection API动态加载和操作类型,理解Type、MethodInfo、PropertyInfo等类的用途。 14. **设计模式**:可能包含单例...

    一个多线程文件搜索的例子

    SearchDemo可能使用了锁或者其他同步机制(如Java的`synchronized`关键字或C#的`lock`语句)来确保线程安全。 4. **回调或事件驱动**:当一个线程找到匹配的文件时,可能通过回调函数或者事件通知主程序或其他线程...

    2021-2022计算机二级等级考试试题及答案No.16669.docx

    19. wait() 方法:wait() 方法是 Object 类的方法,调用者需持有同步锁,调用后线程进入等待状态,并释放锁。notify() 或 notifyAll() 可唤醒等待的线程。 20. OSI 模型:OSI 参考模型分为七层,分别是物理层、数据...

    linux 设备驱动教材 打包 例子分析 pdf.rar

    6. **同步与等待队列**:在多线程环境中,同步机制如信号量、互斥锁、条件变量等,以及等待队列头的使用,能防止数据竞争,保证驱动的正确运行。 7. **设备树**:在嵌入式系统中,设备树是配置硬件的手段,驱动程序...

    linux文件锁flock

    在这个例子中,首先通过`snprintf`构造了一个路径字符串,然后尝试打开该路径对应的文件,并准备对其进行锁定。接下来应该会使用`fcntl`或`flock`函数对该文件进行锁定。 #### 知识点五:文件锁的应用场景 - **...

    java测试试卷六.docx

    2. **互斥锁**:在 Java 中,`synchronized` 关键字用于为对象或方法加互斥锁,确保同一时间只有一个线程能访问被同步的代码块,从而保证线程安全。 3. **线程状态**:当一个 `synchronized` 方法终止时,线程执行...

    【技术分享】Java中的那些“锁”事.pptx

    - `StringBuffer`:线程安全的字符串操作类,适用于多线程环境下的字符串拼接。 - `LinkedList`:非线程安全的链表实现。 - `ConcurrentLinkedQueue`:线程安全的无界并发队列。 了解这些锁和线程安全的数据结构,...

    java基于jedisLock—redis分布式锁实现示例代码

    当 key 存在但不是字符串类型时,返回一个错误。返回值:返回给定 key 的旧值。当 key 没有旧值时,也即是, key 不存在时,返回 nil 。 3)get语法:GET key返回值:当 key 不存在时,返回 nil 。 jedisLock—...

    java测试试卷(六) (2).docx

    2. **线程同步与互斥**:`synchronized` 关键字用于为对象加互斥锁,确保同一时间只有一个线程能访问特定的代码块或方法,以保证线程安全。 3. **线程状态**:当一个`Thread`对象的`run()`方法终止时,线程会进入...

    2021金三银四最新出炉《Java中高级面试题合集》V1.0

    在这个例子中,尽管我们调用了`concat`方法来“修改”字符串`s1`,实际上我们得到的是一个新的`String`对象,原字符串`s1`的内容并没有改变,而是引用了新的字符串对象。 ### 知识点五:常见的Java面试题解析大全 ...

    Go-Go标准库所有使用方法例子请注意这不是Go的中文版标准库

    在字符串和文本处理上,`strings`包提供了常见字符串操作,如查找、替换、分割等;`unicode`和`utf8`包则负责Unicode字符集的支持和UTF-8编码处理。此外,`time`包提供时间相关的功能,包括日期时间格式化、定时器和...

Global site tag (gtag.js) - Google Analytics