常用集合【LinkedList 线程不安全】

来源:互联网 发布:php小说源码 编辑:程序博客网 时间:2024/06/05 17:43

  代码如下:

package com.sxl.TestUtils;import java.util.LinkedList;import java.util.List;public class testMain {// 写一个简单的程序,测试LinkedList是否线程安全。public static void main(String[] args) {LinkedList linkList = new LinkedList();new Thread(new runLinkList(linkList)).start();new Thread(new runLinkList(linkList)).start();}}class runLinkList implements Runnable {// 定义一个LinkedList变量private LinkedList linklist;// 标志boolean flag;int count;// 构造函数public runLinkList(LinkedList linklist) {this.linklist = linklist;}@Overridepublic void run() {while (true) {if (!flag) { linklist.add("abc");System.out.println(Thread.currentThread().getName() + "..." + linklist + "::" + count++);flag = true;}if (flag) {// 这里给你分析下,线程0到这里停,线程1到这里也停,这时线程0醒了继续执行,执行一圈回来停了,这时集合中只有一个// “abc”字符串,线程1醒了接着执行,输出集合中的内容然后删除集合中的字符串,现在集合为空,线程1又停了,线程0醒了输出集合// 再删除的时候集合中就什么都没了删除不成功。说明线程是不安全的,需要加锁,说明线程是不同步的。linklist.remove("abc");try {//休息1sThread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName() + "..." + linklist + "....." + count++);flag = false;}}}}
  报错如下:



0 0
原创粉丝点击