67,541
社区成员
发帖
与我相关
我的任务
分享public class ouThread implements Runnable{
public void run() {
new innerThread(myparam).start();
}
private final class innerThread extends Thread {
private String myparam_;
private innerThread (String myparam) {
myparam_ = myparam;
}
@Override
public void run() {
system.out.prinln(myparam_);
}
}
}public class ouThread implements Runnable{
public void run() {
String myparam = "1";
new innerThread(myparam).start();
myparam = "2";
new innerThread(myparam).start();
}
private final class innerThread extends Thread {
private String myparam_;
private innerThread (String myparam) {
myparam_ = myparam;
}
@Override
public void run() {
system.out.prinln(myparam_);
}
}
}
这个会打2个一样的?
public class OuThread implements Runnable {
String myparam = "";
public OuThread(String myparam) {
this.myparam = myparam;
}
public void run() {
System.out.println("ouThread myparam : " + this.myparam);
new innerThread(myparam).start();
}
private final class innerThread extends Thread {
private String myparam_;
private innerThread(String myparam) {
myparam_ = myparam;
}
@Override
public void run() {
System.out.println(myparam_);
}
}
public static void main(String[] args) {
for(int i=0; i < 10; i++){
new OuThread("test"+i).run();
}
}
}
new innerThread(myparam).start();这句放到synchronized(this){}同步块里。或者用ThreadLocalpublic class TestThread extends Thread{
A a;
public TestThread(A a) {
this.a = a;
}
public static void main(String[] args) {
A a = new A("0");
for(int i=0; i < 5; i++){
Thread t = new TestThread(a);
t.start();
}
System.out.println("主线程|ThreadLocal|"+a.threadSession.get());
System.out.println("主线程|变量|"+a.myparam);
new B(a).start();
try {
Thread.sleep(800);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("主线程|ThreadLocal|"+a.threadSession.get());
System.out.println("主线程|变量|"+a.myparam);
}
public void run() {
a.threadSession.set(a.myparam);
for(int i=0; i < 5; i++){
System.out.println("消费线程|ThreadLocal|"+a.threadSession.get());
System.out.println("消费线程|变量|"+a.myparam);
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class A{
ThreadLocal threadSession = new ThreadLocal();
String myparam = "";
public A(String myparam) {
this.myparam = myparam;
}
}
class B extends Thread{
A a;
public B(A a) {
this.a = a;
}
public void run() {
try {
Thread.sleep(700);
System.out.println("修改线程|ThreadLocal|"+a.threadSession.get());
System.out.println("修改线程|变量|"+a.myparam);
a.myparam = "333";
a.threadSession.set("bbbbb");
System.out.println("修改线程|ThreadLocal|"+a.threadSession.get());
System.out.println("修改线程|变量|"+a.myparam);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
你自己上面说的ThreadLocal是对的,可以解决这个问题。[/quote]
不会啊。。。。。。。网上看不懂。
ThreadLocal加到代码哪里才对啊,我定义的ThreadLocal每次get出来的都是null[/quote]
我的代码跟多线程没关系吗? 我有一段相似的代码,是打印pdf的。总有pdf打不出来,好像就是因为传进来的pdf的打印路径在使用的时候被别的线程修改了,那个内部线程类不是有个修改全局变量的构造方法吗?
你自己上面说的ThreadLocal是对的,可以解决这个问题。[/quote]
不会啊。。。。。。。网上看不懂。
ThreadLocal加到代码哪里才对啊,我定义的ThreadLocal每次get出来的都是nullpublic class ouThread implements Runnable{
public void run() {
new innerThread(myparam).start();
}
private final class innerThread extends Thread {
private myBean myparam_;
private innerThread (myBean myparam) {
myparam_ = myparam;
}
@Override
public void run() {
system.out.prinln(myparam_.getLocal() + "123");
}
}
}
这段代码ThreadLocal应该加到哪里
你自己上面说的ThreadLocal是对的,可以解决这个问题。