关于JAVA创建实现Runnable的创建新线程的基本概念问题!谢谢!
答案:2 悬赏:30 手机版
解决时间 2021-01-08 21:05
- 提问者网友:练爱
- 2021-01-08 03:39
关于JAVA创建实现Runnable的创建新线程的基本概念问题!谢谢!
最佳答案
- 五星知识达人网友:西风乍起
- 2021-01-08 05:05
你大概是要做类似委托的功能吧?
可以用反射完成,我写了一个简易例子,你自己看看是否要完成的是这个功能
很多判断没有添加,你自己完善
public class ThreadMethod implements Runnable{
public static void main(String[] args) {
MyTest m= new MyTest();
new Thread(new ThreadMethod(m,"test")).start();
new Thread(new ThreadMethod(m,"test",new Object[]{"方法"})).start();
}
@Override
public void run() {
try {
//调用某个类的某个方法
method.invoke(o, args);
} catch (Exception e) {
e.printStackTrace();
}
}
//持有要调用对象的实例
private Object o;
//持有要调用对象的方法
private Method method;
//次优要调用对象的方法形参
private Object[] args;
public ThreadMethod(Object o, Method method, Object[] args) {
super();
this.o = o;
this.method = method;
this.args = args;
}
public ThreadMethod(Object o, String methodName) {
this(o,methodName,null);
}
public ThreadMethod(Object o, String methodName, Object[] args) {
Class>[] c=null;
if(args!=null){
c=new Class>[args.length];
for (int i = 0; i < c.length; i++) {
c[i]=args[i].getClass();
}
}
this.o = o;
try {
this.method = o.getClass().getMethod(methodName, c);
} catch (Exception e) {
e.printStackTrace();
}
this.args = args;
}
}
class MyTest{
public void test(){
System.out.println("这是测试");
}
public void test(String name){
System.out.println("这个是测试:"+name);
}
}
可以用反射完成,我写了一个简易例子,你自己看看是否要完成的是这个功能
很多判断没有添加,你自己完善
public class ThreadMethod implements Runnable{
public static void main(String[] args) {
MyTest m= new MyTest();
new Thread(new ThreadMethod(m,"test")).start();
new Thread(new ThreadMethod(m,"test",new Object[]{"方法"})).start();
}
@Override
public void run() {
try {
//调用某个类的某个方法
method.invoke(o, args);
} catch (Exception e) {
e.printStackTrace();
}
}
//持有要调用对象的实例
private Object o;
//持有要调用对象的方法
private Method method;
//次优要调用对象的方法形参
private Object[] args;
public ThreadMethod(Object o, Method method, Object[] args) {
super();
this.o = o;
this.method = method;
this.args = args;
}
public ThreadMethod(Object o, String methodName) {
this(o,methodName,null);
}
public ThreadMethod(Object o, String methodName, Object[] args) {
Class>[] c=null;
if(args!=null){
c=new Class>[args.length];
for (int i = 0; i < c.length; i++) {
c[i]=args[i].getClass();
}
}
this.o = o;
try {
this.method = o.getClass().getMethod(methodName, c);
} catch (Exception e) {
e.printStackTrace();
}
this.args = args;
}
}
class MyTest{
public void test(){
System.out.println("这是测试");
}
public void test(String name){
System.out.println("这个是测试:"+name);
}
}
全部回答
- 1楼网友:骨子里都是戏
- 2021-01-08 05:12
不创建子类那就用匿名类创建
main(){
new Thread(new Runnable(){//第一个线程
public void run(){
try{.... }
}catch(InterrupedException e){}
}).start();
new Thread(new Runnable(){//第二个线程
public void run(){
try{.... }
}catch(InterrupedException e){}
}).start();
}追问哦那我没说清楚,不建立新的类追答我有点蒙了,你的意思是只要创建Thread类型类,而不创建Runnble类型类吗???
main(){
new Thread(new Runnable(){//第一个线程
public void run(){
try{.... }
}catch(InterrupedException e){}
}).start();
new Thread(new Runnable(){//第二个线程
public void run(){
try{.... }
}catch(InterrupedException e){}
}).start();
}追问哦那我没说清楚,不建立新的类追答我有点蒙了,你的意思是只要创建Thread类型类,而不创建Runnble类型类吗???
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯