求助java两个线程并发执行

ThreadA 和 ThreadB 实现 runnable接口。两个类都重载了run(),两个run(Class c); 这两个run是带参数的,如何实现两个线程并发呢?要是 threada.start();threadb.start();这会默认执行不带参数的run()函数吧,要是显式调用带参数的run(参数)函数,那就只能等到第一个线程结束之后,第二个线程才能执行。
求解决之法~

run(参数)不属于runnable接口,执行时不能识别为线成运行。

如何实现并发,关键看你这个“参数”用来干什么。也就是为什么一定要带这个参数。线程取数据有很多方法,不需要通过参数传递。例如:
可以在Thread中声明一个变量,int a。
启动两个线程,循环读a如果没值就wait一下,如果有值跳出循环往下执行。
需要传参数的时候,为a赋值追问

class father{ threada,threadb }, father类中有一些私有属性在两个线程中用到,因此我设想在run()函数中传递father类的对象(threada,run(this)之类),但实际上这没有开启线程。

我又不想将father类的私有属性设为static,这样不恰当。 如果没有解决办法的话,只好将这两个类设为father类的内部类。

我不用带参数的run(),直接用threada.run() threadb.run() ,我试了一下,两个线程并没有并发执行,怎么回事?

追答

你可以用内部类
public class father{
public class threada{
}
public class threadb{
}
}
这样threada 和 threadb可以访问father的method和属性。

追问

我不用带参数的run(),直接用threada.run()  threadb.run() ,我试了一下,两个线程并没有并发执行,怎么回事?threada和threadb继承Thread类,再threada.start(),threadb.start()就能实现并发。为什么实现rannable接口就不能,求解

追答

thread 执行是这样的:
你可以继承Thread类 那就用a.start()执行
如果是实现runable接口就必须new Thread(a).start().
两种方法有区别,你可以看看书。

在继承接口的情况下,a.run(); 只是一个普通的方法,没有赋予任何含义,只有在Thread的封装下才是一个线程运行的函数

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-04-26
传个参进去就可以,多种玩法。

threada,threadb可以声明一个变量来存,run里边用不就行了。追问

是这样的class father{ threada,threadb },run()函数需要的参数是father类的对象。
在构造函数里: threada.run(this);
这种情况如何处理?

第2个回答  2014-04-26
线程开启必须通过调用start()方法来开启,你直接调用run方法 其实并没有开启线程
你所说的"那就只能等到第一个线程结束之后,第二个线程才能执行" 他其实是主线程在执行这两个你重载后带参数的run(param)方法,另外你可以吧参数设置线程的内部属性,定义成全局变量
例子如下:
package mythread;
public class MyThread1 extends Thread
{
private String name;
public MyThread1(String name)
{
this.name = name;
}
public void run()
{
System.out.println("hello " + name);
}
public static void main(String[] args)
{
Thread thread = new MyThread1("world");
thread.start();
}
}
相似回答