Java 多线程传值的四种方法
其实大家都知道多线程传值有三种方式:
1:通过构造方法传递数据
2:通过变量和方法传递数据
3:通过回调函数传递数据
那么博主有个非常变态的需求,所以找出了第四种实现方式,先看效果图:
动态Cron4j调度器,我曾经发过类似的文章,可以去搜索一下.
点击执行走下边的代码,然后根据类名反编译
publicstaticvoidexecuteCron4j(StringpackageClass){ try{ ObjecttaskObj=classNewInstance(packageClass); /**只接受Runnable的定时器**/ if(taskObjinstanceofRunnable){ Runnabletask=(Runnable)taskObj; Threadt1=newThread(newRunnable(){ publicvoidrun(){ task.run(); } }); t1.start(); } }catch(Exceptione){ e.printStackTrace(); } }
线程类:(注意:线程要和上边设置的包名一致)
publicvoidrun(){ TCron4jcron4j=TCron4j.dao.findByClass(this.getClass().getName());//根据包名反编译,然后查询数据库 }
现在博主的需求是:有可能在同一个线程类执行不一样的程序。
上边两个红框中的cron4j调度器使用的是一个,根据参数不同来执行的。如果我点击后边的手动执行一次,按照我上边给出的java代码是无法实现的。
看下边的新的代码:
publicstaticvoidexecuteCron4j(StringpackageClass){ try{ ObjecttaskObj=classNewInstance(packageClass); /**只接受Runnable的定时器**/ if(taskObjinstanceofRunnable){ Runnabletask=(Runnable)taskObj; Threadt1=newThread(newRunnable(){ publicvoidrun(){ task.run(); } }); t1.setName("uuid");//这个是线程的名字 t1.start(); } }catch(Exceptione){ e.printStackTrace(); } }
从上边的代码可以看出,第四种传值方式是通过设置线程的名字来操作的。
这个名字你可以传一个id,然后去数据库查询更多的参数。
publicvoidrun(){ TCron4jcron4j=TCron4j.dao.findByUUID(Thread.currentThread().getName());//根据线程名字查询数据库 }
这种方式完美的解决了博主的难题。现在共享出来分享给大家!!!
以上就是Java多线程传值的四种方法的详细内容,更多关于Java多线程传值的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。