黑马程序员技术交流社区
标题:
一道网上的面试题
[打印本页]
作者:
xclyijin
时间:
2015-7-27 17:11
标题:
一道网上的面试题
今天积极备战面试,可是网上搜索完面试题后我奔溃了。。。。好像还挺难。
这是其中一道,我想了很久,如果是真的面试,估计就挂了。。。。。。。。
声明一个共享数组,起两个线程,两个线程分别隔一段时间(可以写一个随机数),
给数组中添加数据,每一个线程为数组添加3个数据即可。
作者:
zuopiezi
时间:
2015-7-27 17:17
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
//声明一个共享数组,起两个线程,
//两个线程分别隔一段时间(可以写一个随机数),给数组中添加数据,
//每一个线程为数组添加3个数据即可。
public class Test21 {
//写一个类实现Runnable接口,创建两个Thread对象传入该类
//多线程操作共享数组需要同步synchronize
public static void main(String...args){
fillArray fa = new fillArray();
Thread t1 = new Thread(fa);
Thread t2 = new Thread(fa);
t1.start();
t2.start();
}
}
class fillArray implements Runnable{
//定义共享数组
int[] arr = new int[6];
Random r = new Random();
int count = 0;
public void run() {
// 同步代码块
synchronized(r){
while(count<arr.length){
int num = r.nextInt(20);
System.out.println(Thread.currentThread().getName()+"向数组中加入了"+num);
arr[count] = num;
count++;
try {
r.wait(500);
} catch (Exception e) {
e.printStackTrace();
}
}
}
System.out.println(Arrays.toString(arr));
}
}
复制代码
作者:
心在左边跳
时间:
2015-7-27 17:51
我写的好麻烦,不知道谁有简便算法
public class Demo {
public static void main(String[] args) {
Res res = new Res();
new Thread(new MyThread1(res)).start();
new Thread(new MyThread2(res)).start();
}
}
class Res {
private int arr[] = new int[10];
private int index = 0;
private boolean flag = true;
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
public synchronized void add1() {
if (flag) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
arr[index] = (int) (Math.random() * 10);
System.out.println(Thread.currentThread().getName() + ":" + arr[index]);
index++;
setFlag(!flag);
notify();
}
public synchronized void add2() {
if (!flag) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
arr[index] = (int) (Math.random() * 10);
System.out.println(Thread.currentThread().getName() + ":" + arr[index]);
index++;
setFlag(!flag);
notify();
}
}
class MyThread1 implements Runnable {
private Res res;
private int count = 0;
public MyThread1(Res res) {
this.res = res;
}
@Override
public void run() {
while (count < 3) {
res.add1();
count++;
}
}
}
class MyThread2 implements Runnable {
private Res res;
private int count = 0;
public MyThread2(Res res) {
this.res = res;
}
@Override
public void run() {
while (count < 3) {
res.add2();
count++;
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2