我对程序运行的分析但不是那样发生的事情::
-I在main方法中创建了2个线程,即Child1和Child2。
- 然后启动线程
-Child1将run()方法作为一个单独的线程输入并进入synchronized块并打印1并因为调用wait方法而休眠。
-Child2作为单独的线程输入run()方法并进入synchronized块并打印1并通知Child1唤醒。
- 这个过程一直持续到5
package multi_threading;
public class inter_thread implements Runnable {
static inter_thread obj;
boolean val=false;
Thread t;
public inter_thread(){}
public inter_thread(String msg){
t=new Thread(obj,msg);
t.start();
}
public static void main(String args[]){
obj=new inter_thread();
inter_thread obj1=new inter_thread("Child1");
inter_thread obj2=new inter_thread("Child2");
try{
obj1.t.join();
obj2.t.join();
}catch(InterruptedException e){
System.out.println("Interrupted");
}
}
public void run(){
int i;
synchronized(obj){
for(i=1;i<=5;i++){
System.out.println(i);
val=!val;
while(val)
try{
wait();
}catch(InterruptedException e){
System.out.println("Interrupted");
}
notify();
}
}
}
}
我想使用多线程::
显示这样的输出1
1
2
2
3
3
4
4
5
5
OUTPUT ::
1
1
2
有谁能告诉我这是什么问题?
EDIT2 ::我已经编辑了以前的代码
答案 0 :(得分:0)
Thread t;
未初始化。
System.out.println(t.getName()+" has "+i);
//您将在此处获得例外
答案 1 :(得分:0)
- 因为每个帖子都有obj的副本我才刚刚获得
1
1
2
作为输出
- 我修改了程序,为线程Child1和Child2共享对象。
package multi_threading;
public class inter_thread {
Thread t;
public inter_thread(test_value obj,String msg){
t=new Thread(obj,msg);
t.start();
}
}
class test_value implements Runnable{
boolean val=false;
public static void main(String args[]){
test_value obj=new test_value();
inter_thread obj1=new inter_thread(obj,"Child1");
inter_thread obj2=new inter_thread(obj,"Child2");
try{
obj1.t.join();
obj2.t.join();
}catch(InterruptedException e){
System.out.println("Interrupted");
}
}
public void run(){
int i;
synchronized(obj){
for(i=1;i<=5;i++){
System.out.println(i);
obj.val=!obj.val;
while(obj.val)
try{
wait();
}catch(InterruptedException e){
System.out.println("Interrupted");
}
notify();
}
}
}
}
- 我收到编译错误,说obj无法解析。
- 如何在线程之间共享obj以及如何生成输出,如下所示:
1
1
2
2
3
3
4
4
5
5