java runnable线程如何传参?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java runnable线程如何传参?相关的知识,希望对你有一定的参考价值。
Thread thread2=new Thread(new ThreadUseRunnable(),"SecondThread");
"SecondThread"是参数传递下去吗|?run()如何获取到这个值?
请提示或举例Runnable的参数是使用方法
Runnable里面没有传参函数,所以得自己造一个
0.自定义一个接口,继承Runnable,新增一个传参方法
public interface MyRunnable extends Runnablepublic MyRunnable setParam(String... param);
实现这个自定义接口
String message;
@Override
public MyRunnable setParam(String... param)
message = param[0];
return this;
@Override
public void run()
sendMessage(message);
;
2.初始化线程池,运行Runnable
cachedThreadPool.execute(sendMessage.setParam("I am service"));
如上所示,线程池调用的一个runnable实例,这个runnable实例传入了一个字符串参数
参考技术A "SecondThread" 是新new的线程的名字,可以通过getName()方法拿到这个线程的名字追问线程中需要用到线程外面的一个字符串 如何传呢。
追答得看是什么类型的字符串,是字符串常量呢,还是某个方法的返回值呢,还是什么
追问string 某个方法的返回值
追答方法是静态的还是非静态的呢,如果是静态的可以直接在run()方法里调用这个方法,然后把返回值保存下来,如果是非静态的可能需要拿到这个对象的引用了。
追问非静态的方法如何弄?
这个方法的返回值如何作为线程的参数并能取到?
首先,我不太明白你说的线程的参数是什么意思。
其次,不知道你这个具体是什么问题,但我理解是你想取到一个类的非静态的方法的返回值,那么你可以在实现Runnable接口的类里声明一个上述类类型的成员变量,然后就可以在run()方法里调用这个对象的这个方法了。
哦 前面我说的不对。你说的“ 可以在实现Runnable接口的类里声明一个上述类类型的成员变量 ” 这个是我想要的答案。
追答恩,持有对方的引用,这是一个比较常用的方法
追问如传递string s。请举例一下形参,实参,和获取到值的方法。
追答形参是定义方法的时候参数列表里的参数、实参说的调用方法时传递给方法的参数,而run()方法的参数列表为空,你重写run()方法不能改变它的参数列表,所以想找run()方法里拿到值只能在方法体里拿,那就不是所谓的形参、实参了。
追问是不是线程内可以直接使用线程外定义的变量?不需要通过参数
我就是想从run()内拿到 线程定义前的变量的值
我程序的流程是这样:某个方法的返回值赋值给s;然后定义启动一个线程。其中线程中需要用到变量s。
我的问题是线程中如何拿到s的值?
这个能在哪里获取run()的里面还是外面
Runnable 怎么获取线程的名字
获取线程名字这件事情本质上和Runnable是没有关系的。一个Runnable可以给多个线程去运行,所以如果在这个概念上你有误解的话,希望重新考虑一下。另外,在任何时候,你都可以用Thread.currentThread().getName()来获取当前线程的名字 参考技术A Irreappearable回答的就是答非所问,题主问的应该是,在run内部如何获取线程名。因为在外部,不论哪种实现,最后都要以thread对象的形式存在,所以必定会有线程名。
首先,实现runable没有线程名的原因,就是因为你在实现的时候,压根就没有加上线程名,而thread的构造方法public Thread(Runnable target)中,也没有给你写入名字的机会(下面init直接放的是null)。
我建议run内只做线程内基本实现就好,反正去实现接口的,大部分都是要继承一个模板方法,所以,在线程处理的地方加上对独立线程的操作比较好。
以上是关于java runnable线程如何传参?的主要内容,如果未能解决你的问题,请参考以下文章