欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

java线程三部分_java 多线程三

发布时间:2024/7/23 40 豆豆
生活随笔 收集整理的这篇文章主要介绍了 java线程三部分_java 多线程三 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

注意到 java 多线程一 中 MyThread2 运行结果出现0、-1,那是因为在操作共享数据时没有加锁导致。

加锁的方式:

1、同步方法

2、同步代码块

3、锁

读过 java.util.concurrent 集合源码就知道:

HashMap:

public V put(K key, V value) {...}

Hashtable:

public synchronized V put(K key, V value) {...}

ConcurrentHashMap:

final V putVal(K key, V value, boolean onlyIfAbsent) {

...

synchronized (f) { ...}

}

CopyOnWriteArrayList:

public void add(int index, E element) {

final ReentrantLock lock = this.lock;

lock.lock();

try {

...

} finally {

lock.unlock();

}

}

我们最好只同步修改数据的部分,其他的尽量不要去同步(特别是耗时的,比如sleep()..io..)

class MyThread2 implements Runnable {

int tickets = 5;

public void run() {

for (; tickets > 0; ) {

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

synchronized (this){

if (tickets>0){

System.out.println(Thread.currentThread().getName() + ":" + tickets--);

}

}

}

}

}

输出:

MyThread2_1:5

MyThread2_2:4

MyThread2_3:3

MyThread2_1:2

MyThread2_2:1

创作挑战赛新人创作奖励来咯,坚持创作打卡瓜分现金大奖

总结

以上是生活随笔为你收集整理的java线程三部分_java 多线程三的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。