ArrayList和Vector有什么区别?HashMap和HashTable有什么区别?StringBuilder和StringBuffer有什么区别?这些都是Java面试中常见的基础问题。面对这样的问题,回答是:ArrayList是非线程安全的,Vector是线程安全的;HashMap是非线程安全的,HashTable是线程安全的;StringBuilder是非线程安全的,StringBuffer是线程安全的。因为这是昨晚刚背的《Java面试题大全》上面写的。此时如果继续问:什么是线程安全?线程安全和非线程安全有什么区别?分别在什么情况下使用?这样一连串的问题,一口老血就喷出来了…
非线程安全的现象模拟
这里就使用ArrayList和Vector二者来说明。
下面的代码,在主线程中new了一个非线程安全的ArrayList,然后开1000个线程分别向这个ArrayList里面添加元素,每个线程添加100个元素,等所有线程执行完成后,这个ArrayList的size应该是多少?应该是100000个?
public class Main { public static void main(String[] args) { // 进行10次测试 for(int i = 0; i < 10; i++) { test(); } } public static void test() { // 用来测试的List List<Object> list = new ArrayList<Object>(); // 线程数量(1000) int threadCount = 1000; // 用来让主线程等待threadCount个子线程执行完毕 CountDownLatch countDownLatch = new CountDownLatch(threadCount); // 启动threadCount个子线程 for(int i = 0; i < threadCount; i++) { Thread thread = new Thread(new MyThread(list, countDownLatch)); thread.start(); } try { // 主线程等待所有子线程执行完成,再向下执行 countDownLatch.await(); } catch (InterruptedException e) { e.printStackTrace(); } // List的size System.out.println(list.size()); } } class MyThread implements Runnable { private List<Object> list; private CountDownLatch countDownLatch; public MyThread(List<Object> list, CountDownLatch countDownLatch) { this.list = list; this.countDownLatch = countDownLatch; } public void run() { // 每个线程向List中添加100个元素 for(int i = 0; i < 100; i++) { list.add(new Object()); } // 完成一个子线程 countDownLatch.countDown(); } }
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1148
183.71 KB下载数642
644.84 KB下载数2756
相关文章
发现更多好内容- 如何在 Java 中实现踢人下线功能?(Java怎么实现踢人下线功能)
- Java 交换器(exchanger)的替代方案都有哪些呢?(java exchanger的替代方案有哪些)
- Java 中如何使用 JsonNode 来解析 JSON 数据?(Java JsonNode如何解析JSON数据)
- 如何进行Ruby代码安全检测
- 在 Java 中如何设置 Swing 的背景图片?(java中swing如何设置背景图片)
- Java 输入输出流出现问题该如何解决?(Java输入输出流出现问题怎么解决)
- Java 验证码的存储方式都有哪些呢?(Java验证码的存储方式有哪些)
- 在 Java 集合框架中,Arrays 类究竟有着怎样的地位?(Arrays类在Java集合框架中的地位)
- Java 调用 WebService 服务的详细步骤有哪些?(java调用WebService服务的步骤是什么)
- Java中MVC设计模式的特点有哪些?(java中mvc设计模式有哪些特点)