黑马程序员技术交流社区
标题:
定义一个数组,开启两个线程,分别隔一段时间存入一个...
[打印本页]
作者:
sk0806
时间:
2014-10-31 12:53
标题:
定义一个数组,开启两个线程,分别隔一段时间存入一个...
如题:定义一个数组,开启两个线程,分别隔一段时间存入一个随机数,每个线程存满5个即可在论坛看到这个题,可能是自己学的还不够,求答案!!!
作者:
郑飞
时间:
2014-10-31 12:53
import java.util.Random;
public class ShareArrThread {
/*
* 声明一个共享数组,起两个线程,两个线程分别隔一段时间(可以写一个随机数),
* 给数组中添加数据,每一个线程为数组添加3个数据即可。
*/
public static void main(String[] args)
{
final Arr arr = Arr.getArr();
new Thread(
new Runnable()
{
public void run()
{
for(int i = 0;i<3;i++)
arr.addA();
}
}
){}.start();
new Thread(
new Runnable()
{
public void run()
{
for(int i = 0;i<3;i++)
arr.addB();
}
}
){}.start();
}
}
class Arr
{
private Arr()
{}
private static Arr a = null;
public static Arr getArr()
{
if(a==null)
synchronized(Arr.class)
{
if(a==null)
a = new Arr();
}
return a;
}
int[] arr = new int[6];
int i = -1;
boolean flag = true;
public synchronized void addA()
{
while(flag)
try {
wait();
Thread.sleep(new Random().nextInt(2000));
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"添加了"+(arr[++i]=new Random().nextInt(2000))+";");
flag = !flag;
notify();
}
public synchronized void addB ()
{
while(!flag)
try {
wait();
Thread.sleep(new Random().nextInt(2000));
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"添加了"+(arr[++i]=new Random().nextInt(2000))+";");
flag = !flag;
notify();
}
}
复制代码
作者:
sk0806
时间:
2014-10-31 13:39
额,,,金币不够多还是问题太简单了,,大神们,求解答
作者:
cvnmklop
时间:
2014-10-31 14:12
需求不明确啊
作者:
sk0806
时间:
2014-10-31 14:28
cvnmklop 发表于 2014-10-31 14:12
需求不明确啊
额,,论坛看到的这个问题
作者:
cvnmklop
时间:
2014-10-31 16:11
sk0806 发表于 2014-10-31 14:28
额,,论坛看到的这个问题
能给个链接吗
作者:
郑飞
时间:
2014-10-31 16:21
不过这里好像可以不用单例 直接在main里new一个
如果用继承Thread类开线程就要用了
作者:
九零零
时间:
2014-11-3 21:32
package com.itheima;
import java.util.Arrays;
import java.util.Random;
public class Test6 {
public static void main(String[] args) {
AddArray a = new AddArray();
Thread t1 = new Thread(a);
Thread t2 = new Thread(a);
t1.start();
t2.start();
}
}
class AddArray implements Runnable {
// 定义数组
private int[] arr = new int[10];
// 定义指针
private int pos = 0;
public void run() {
// 每个线程添加五个数字
for (int x = 0; x < 5; x++) {
// 获得随机数
int temp = new Random().nextInt();
synchronized (arr) {
arr[pos] = temp;
pos++;
System.out.println(Thread.currentThread().getName()
+ "...添加了..." + temp);
System.out.println(Arrays.toString(arr));
}
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
}
复制代码
供楼主参考
作者:
请叫我丶菜鸟
时间:
2014-12-10 21:45
怎么开启两个线程啊,坤姐
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2