美文网首页线程
线程间操作List

线程间操作List

作者: liuhuiAndroid | 来源:发表于2017-06-29 21:34 被阅读1198次
/**
 * 多线程处理List 
 * @author lh
 *
 */
public class MultiThread {
    
    public static final List<Long> list  = Collections.synchronizedList(new ArrayList<Long>());
    
    public static void main(String[] args) {
        for(int i = 1;i<=100;i++){
            list.add(Long.valueOf(i));
        }
        
        MyThread myThread = new MultiThread().new MyThread(); 
        Thread t1 = new Thread(myThread); 
        t1.setName("线程1"); 
        t1.start(); 

        Thread t2 = new Thread(myThread); 
        t2.setName("线程2"); 
        t2.start(); 

        Thread t3 = new Thread(myThread); 
        t3.setName("线程3"); 
        t3.start(); 

        Thread t4 = new Thread(myThread); 
        t4.setName("线程4"); 
        t4.start(); 
    }
    
    
    public class MyThread implements Runnable{

        @Override
        public void run() {
            for(int i = 0;i<list.size();i++){
                // 同步list,打印数据并删除该数据 
                synchronized (list) {
                    try {
                        //当前线程睡眠,让其它线程获得执行机会 
                        Thread.sleep(100);
                    } catch (Exception e) {
                        // TODO: handle exception
                    }
                    System.out.print(Thread.currentThread().getName() + ":" + list.get(i)+"\n");
                    list.remove(i);
                }
            }
        }
        
    }
}
  • 好奇为什么在有synchroniezed方法的同时会出现Collections.synchronizedList
  • Collections.synchronizedList可以得到本身不是线程安全的容易的线程安全的状态
  • 线程安全仅仅指的是如果直接使用它提供的函数,比如:add(obj);或者poll(obj);,这样我们自己不需要做任何同步
  • Collections.synchronizedList返回的线程安全的List内部使用的锁是list
  • 可以实现线程安全性

有空看一本java并发编程的书再接着更新哈

相关文章

  • 线程间操作List

    例子来自 Java多线程操作List 接下来是超详细分析 好奇为什么在有synchroniezed方法的同时会出现...

  • Day12--多线程

    线程间通讯 线程间通讯:其实就是多个线程在操作同一个资源,但是操作的动作不同。 等待唤醒机制 wait()、not...

  • NSThread三种创建线程的方法

    对耗时操作的理解 NSThread基础 线程控制 线程安全 线程间同行

  • JAVA 多线程与锁

    JAVA 多线程与锁 线程与线程池 线程安全可能出现的场景 共享变量资源多线程间的操作。 依赖时序的操作。 不同数...

  • 列表与队列——谈谈线程安全

    关键词:线程安全、GIL、原子操作(atomic operation)、存储数据类型(List、Queue.Que...

  • Java1.8-CopyOnWriteArrayList源码解析

    一、概述   CopyOnWriteArrayList是对List进行操作的一个线程安全的类,是ArrayList...

  • ConcurrentModificationException问

    结论:此问题:出现此问题说明多个线程同时操作一个Linkedlist,或单线程下使用list的remove等方法且...

  • 线程间通信-等待唤醒机制

    线程间通信:其实就是多个线程在操作同一个资源,但是操作的动作不同。 wait:notify ( )notifyAl...

  • Java 多线程 线程间通信-等待唤醒机制

    线程间通讯:其实就是多个线程在操作同一个资源,但是操作的动作不同。 wait();notify();notifyA...

  • Java线程间的通信

    1、线程间通信的定义 线程的通信可以被定义为:当多个线程共同操作共享的资源时,线程间通过某种方式互相告知自己的状态...

网友评论

    本文标题:线程间操作List

    本文链接:https://www.haomeiwen.com/subject/iqmvcxtx.html