67,514
社区成员
发帖
与我相关
我的任务
分享
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();
}
}
}
public 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应该加到哪里