迅雷的一笔试题:有一个数组,长度为10,有两个线程,一个往里增加数,一个往外删除数
来源:互联网 发布:面向对象编程 java 编辑:程序博客网 时间:2024/04/29 14:48
题目:有一个数组,长度为10,有两个线程,一个往里增加数,满了则暂停,空了再继续, 一个往外删除数,没有数据时则暂停,有 了再继续。
感觉:很久的笔试了,当时还有点蒙,做不好。现在才想做一下,使用thread的wait()和notify()老是出错,逼得我使用了一惯的作法。
注意:1.线程的挂起与继续。 2.数组的加锁
package com.chruan.thread.test;import java.util.ArrayList;import java.util.List;/** * 有一个数组,长度为10,有两个线程,一个往里增加数,满了则暂停,空了再继续, * 一个往外删除数,没有数据时则暂停,有 了再继续。 * @author Administrator * */public class ArrayListThread {public static void main(String[] args) {ArrayListThread a = new ArrayListThread();a.start();}private List<String> arr = new ArrayList<String>(10);private int size = 10;AddThread at = new AddThread();DelThread dt = new DelThread();public void start() {at.start();dt.start();}public boolean add() {boolean s = false;int n;String str = null;synchronized (arr) {if ((n = arr.size()) < 10) {str = "" + n;arr.add(str);s = true;}else {//满了at.start = false;//暂停添加//dt.start = true;//满了才开始删除}dt.start = true;//不空就开始删除}if (s)System.out.println("++" + str);return s;}public boolean del() {boolean s = false;int n;String str = null;synchronized (arr) {if ((n = arr.size()) > 0) {str = arr.remove(0);s = true;}else {//空了dt.start = false;//暂停删除at.start = true;//开始添加}}if (s)System.out.println("--" + str);return s;}class AddThread extends Thread {boolean start = true;@Overridepublic void run() {while (true) {if (start)add();try {sleep(5);} catch (InterruptedException e) {}}}}class DelThread extends Thread {boolean start = true;@Overridepublic void run() {while (true) {if (start)del();try {sleep(5);} catch (InterruptedException e) {}}}}}
- 迅雷的一笔试题:有一个数组,长度为10,有两个线程,一个往里增加数,一个往外删除数
- 162 有2个数组,里面有 N 个整数,看是否两个数组里存在一个同样的数
- 有一个数组,每隔两个数删掉一个数,到末尾又循环到开头继续进行,求最后一个被删除的数的原始下标位置
- 长度为n的数组,有一个数m重复出现了n/2+1次,找出这个数
- 一个数组内有两个相同的数,通过编程找到这两个数
- 1到100,放在长度99的数组里,有一个没有在里面,编程找出那个数
- 1到100,放在长度99的数组里,有一个没有在里面,编程找出那个数
- 判断一个有序数组中是否有两个数的和等于给定的数
- 给一个数a,求一组数据中是否有两个数的和为a?
- 数组没隔两个数删除一个数最后循环求最后删除数的下标
- 有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。没事写写程序,增加点点数。
- 在一个数组中找两个数,使得它们的和为一个指定的数
- 数组中是否有两个数的和为10
- 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数
- 面试:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数
- 数组中有一个数字出现的次数超过了数组长度的一半,请找出这个数。java实现
- 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数
- 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数
- 激励自己的名言警句
- Cocos2d-x CCHttpRequest联网
- 高效显示图片
- Email 下载音频附件完成后播放不显示名称
- 在Linux下运行Tomcat
- 迅雷的一笔试题:有一个数组,长度为10,有两个线程,一个往里增加数,一个往外删除数
- QT信号与槽
- PaginationSupport 分页
- 如何向App Store提交应用
- 关于oracle的&字符的处理
- 性能测试知多少----性能测试分类之我见
- [linux]打开linux中某个端口
- Java synchronized详解
- openssl使用