黑马程序员技术交流社区
标题:
声明一个共享数组,起两个线程,两个线程分别隔一段时...
[打印本页]
作者:
18573626921
时间:
2016-5-18 17:33
标题:
声明一个共享数组,起两个线程,两个线程分别隔一段时...
public class Test18 {
/**为什么一加上Sleep就给老子输出全是零了。。。
* 声明一个共享数组,起两个线程,两个线程分别隔一段时间(可以写一个随机数),给数组中添加数据,每一个线程为数组添加3个数据即可。
* @param args
*/
public static void main(String[] args) {
final Random r= new Random();
final int []arr =new int[6];
new Thread(){
public void run(){
for(int i=0;i<3;i++){
arr[Index.index++]=r.nextInt(100);
}
}
}.start();
new Thread(){
public void run(){
try {
Thread.sleep(1000);
for(int i=0;i<3;i++){
arr[Index.index++]=r.nextInt(100);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
for (int i : arr) {
System.out.println(i);
}
}
}
class Index{
public static int index=0;
}
作者:
龙翔java
时间:
2016-5-18 17:33
你应该将sleep加在main线程中,你现在加的sleep,只是让新创建的进程等待了,main方法依然会在数据加进去之前就执行完了
作者:
jing201314z
时间:
2016-5-19 23:49
主线程也是线程 都在执行 就在那个线程停的一秒的时间 你主线程已经遍历完了 但是你的随机数还没生成完
作者:
jing201314z
时间:
2016-5-20 00:08
想看他怎么走的 可以在for循环里面加一个输出语句随便打印个什么,就能看的到效果了
作者:
liming1990422
时间:
2016-5-25 00:10
本帖最后由 liming1990422 于 2016-5-25 00:17 编辑
public static void main(String[] args) {
// TODO Auto-generated method stub
final Random r= new Random();
final int []arr =new int[6];
new Thread(){
public void run(){
try {
Thread.sleep(10);
for(int i=0;i<3;i++){
arr[Index.index++]=r.nextInt(100);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
new Thread(){
public void run(){
try {
Thread.sleep(10);
for(int i=0;i<3;i++){
arr[Index.index++]=r.nextInt(100); // arr[Index.index++]=r.nextInt(100);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
try {
Thread.sleep(1000);
for (int i : arr) { //当线程1睡眠时主线程已经执行完毕 所以打印出来的是初始值
System.out.print(i+" ");
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class Index{
public static int index=0;
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2