java线程传值的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java线程传值的问题相关的知识,希望对你有一定的参考价值。
我现在有类A,有一个线程类B,线程B有个方法是读取邮件内容的方法,然后run()方法里就是不断的调取读这个方法,当读到有效数据(也就是我想要的数据时,线程停止)。我想问的是有什么办法能让这个有效数据传递给类A当中去,我试过N中方法传过去的都是NULL。
类似代码:
class B implements Runnable
读取邮件的方法()
......
线程停止的方法()
......
run()
while(true)
if(读取邮件的方法()是我想要的数据)
把读到数据用变量保存起来传递给类A -----就是这里应该怎么写
线程停止的方法();
效果就是能让类A中方法直接可以读取这到数据,有可能读的是空数据,也有可能读到有效数据
class A
或者,有一个线程间传值得方法,管道技术,不知道你有没有接触这方面的内容:
Java中利用管道实现线程间的通讯
管道(pipe)流是一种特殊的流,用于在不同线程(threads)间直接传送数据。一个线程发送数据到输出管道,另一个线程从输入管道中读数据。通过使用管道,实现不同线程间的通讯。
你可以搜艘县官的内容,相信对你有帮助 参考技术A 你是在哪启动这个线程的?
你可以写个方法返回你要得到的数据被
没必要是静态属性..反正你里面写的是无限循环 当遇到值的时候就可以执行方法 把值传给本身属性 然后在把本身属性传给启动线程的类
如果说是你线程自己启动自己... 那就得用静态属性传给其他类了.. 参考技术B 最简单的方法是你在B的构造函数里把A作为参数传进来,拿到A的对象,然后就可以在B中直接调用A了。
示例:
class B implements Runnable
A a;
B(....,A a) //B的构造函数
this.a = a;
读取邮件的方法()
......
线程停止的方法()
......
run()
while(true)
if(读取邮件的方法()是我想要的数据)
把读到数据用变量保存起来传递给类A
这里就能直接调了:
a.参数 = 想要的数据;
线程停止的方法();
大至是这个意思,但是这种方法不太规范,当类数量太多时会造成混乱,所以最好能找跟规范的方法去做。 参考技术C 在A类里写一个接收数据的方法就好receive(Object obj)
然后在线程中new一个A类对象并调用这个方法把数据当成参数传进去就好
如何解决 jsp 中url传值的中文乱码问题
在jsp中,如果在url中传递中文时会出现乱码,其实解决方法非常简单: 第一步:编码(以传递的参数为str为例) 在传递数据前将str进行编码Java.net.URLEncoder.encode(str) 第二步:解码 在获取数据端将得到的数据进行解码 new String(str.getBytes("ISO8859_1"))简单示例程序如下:
<%@ page contentType="text/html;charset=gb2312" %
<a href="ds.jsp?url=<%=java.net.URLEncoder.encode("编码的是这里","GB2312")%"点击这里</a<%//request.setCharacterEncoding("GBK");
if(request.getParameter("url")!=null)str=request.getParameter("url");
//下面是解码
str=java.net.URLDecoder.decode(str,"GB2312"); 参考技术A 第一步:在tomcat 的server.xml文件中设置web服务器端口配制中加下面两句:
useBodyEncodingForURI="true"
URIEncoding="UTF-8"
第二步:JSP页面编码用UTF-8(也可以用“gb2312",第一步与解码要一至)传值时编码一下:
以传递的参数为strPar为例, 在传递数据前将strPar进行编码java.net.URLEncoder.encode(strPar,"UTF-8");
第二步:解码 在获取数据服务器端Action中得到的strPar进行解码java.net.URLDecoder.decode(strPar,"UTF-8");
本人测试时传入action中可以不解码也正常。
举例:
Url传值:
<a href="myPage.jsp?strPar=<%=java.net.URLEncoder.encode("中文参数值","UTF-8")%>">点击这里</a>
//下面是解码
String cnStr=java.net.URLDecoder.decode(strPar,"GB2312"); 参考技术B 编码方式为utf-8时确实会url参数中文乱码问题,用gb2312问题就能解决,建议楼主在做参数传递的时候尽量不要传递中文
以上是关于java线程传值的问题的主要内容,如果未能解决你的问题,请参考以下文章