网站建设新手看什么书,厦门 做网站,响应式网站框架,网络营销和网络推广注意到 java 多线程一 中 MyThread2 运行结果出现0、-1#xff0c;那是因为在操作共享数据时没有加锁导致。加锁的方式#xff1a;1、同步方法2、同步代码块3、锁读过 java.util.concurrent 集合源码就知道#xff1a;HashMap:public V put(K key, V value) {...}Hashtable:…注意到 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 (tickets0){System.out.println(Thread.currentThread().getName() : tickets--);}}}}}输出MyThread2_1:5MyThread2_2:4MyThread2_3:3MyThread2_1:2MyThread2_2:1