方法1
Xc8 xc81=new Xc8();
Thread ee=new Thread(xc81);
Thread ff=new Thread(xc81);
ee.start();
ff.start();
方法2
Xc8 xc81=new Xc8();
Xc8 xc82=new Xc8();
Thread ee=new Thread(xc81);
Thread ff=new Thread(xc82);
ee.start();
ff.start();
关于java中的创建线程这两种启动线程方法有什么不同?
答案:1 悬赏:0 手机版
解决时间 2021-02-11 18:48
- 提问者网友:轻浮
- 2021-02-11 11:03
最佳答案
- 五星知识达人网友:琴狂剑也妄
- 2021-02-11 11:43
//方法1:
//两个线程ee和ff共享同一个对象xc81,如果其中一个线程修改了xc81,另一个线程能访问到这种修改。
//方法2:
//与方法1相反。如果线程ee修改了对象xc81,不会影响xc82,修改是相互独立的。
//看例子。
public class XCTest
{
public static void main(String[] args)
{
//为了便于区分输出的内容,每次注释掉其中的一个再编译,对比运行的结果
XCTest.F1();
//XCTest.F2();
}
//因为xc81是共享的,当线程ee在run方法中修改xc81的msg后,线程ff的输出也改变了
static void F1()
{
Xc8 xc81=new Xc8();
xc81.msg="F1中的两个线程共享一个对象xc81";
Thread ee=new Thread(xc81);
ee.setName("F1中的线程ee");
Thread ff=new Thread(xc81);
ff.setName("F1中的线程ff");
ee.start();
ff.start();
}
//因为xc81归线程ee独享,当ee在run方法中修改xc81的msg后,线程ff的输出不变
static void F2()
{
Xc8 xc81=new Xc8();
xc81.msg="F2中的线程ee使用的对象xc81";
Xc8 xc82=new Xc8();
xc82.msg="F2中的线程ff使用的对象xc82";
Thread ee=new Thread(xc81);
ee.setName("F2中的线程ee");
Thread ff=new Thread(xc82);
ff.setName("F2中的线程ff");
ee.start();
ff.start();
}
}
class Xc8 implements Runnable
{
public void run()
{
for(int i=1;i<=10;i++)
{
System.out.println("由线程\""+Thread.currentThread().getName()+"\"输出的msg的内容:"+msg);
System.out.println();
if(6==i)
{
if(Thread.currentThread().getName().equals("F1中的线程ee"))
{
this.msg="由F1中的线程共享的对象xc81的msg,被F1中的线程ee改变了,导致F1中的另一个线程ff的输出也改变了";
}
else if(Thread.currentThread().getName().equals("F2中的线程ee"))
{
this.msg="F2中的线程ee,改变了它使用的对象xc81的msg的内容,没有影响F2中的另一个线程ff的输出";
}
}
try
{
Thread.sleep(2000);
}
catch(Exception e)
{
}
}
}
String msg;
}
//两个线程ee和ff共享同一个对象xc81,如果其中一个线程修改了xc81,另一个线程能访问到这种修改。
//方法2:
//与方法1相反。如果线程ee修改了对象xc81,不会影响xc82,修改是相互独立的。
//看例子。
public class XCTest
{
public static void main(String[] args)
{
//为了便于区分输出的内容,每次注释掉其中的一个再编译,对比运行的结果
XCTest.F1();
//XCTest.F2();
}
//因为xc81是共享的,当线程ee在run方法中修改xc81的msg后,线程ff的输出也改变了
static void F1()
{
Xc8 xc81=new Xc8();
xc81.msg="F1中的两个线程共享一个对象xc81";
Thread ee=new Thread(xc81);
ee.setName("F1中的线程ee");
Thread ff=new Thread(xc81);
ff.setName("F1中的线程ff");
ee.start();
ff.start();
}
//因为xc81归线程ee独享,当ee在run方法中修改xc81的msg后,线程ff的输出不变
static void F2()
{
Xc8 xc81=new Xc8();
xc81.msg="F2中的线程ee使用的对象xc81";
Xc8 xc82=new Xc8();
xc82.msg="F2中的线程ff使用的对象xc82";
Thread ee=new Thread(xc81);
ee.setName("F2中的线程ee");
Thread ff=new Thread(xc82);
ff.setName("F2中的线程ff");
ee.start();
ff.start();
}
}
class Xc8 implements Runnable
{
public void run()
{
for(int i=1;i<=10;i++)
{
System.out.println("由线程\""+Thread.currentThread().getName()+"\"输出的msg的内容:"+msg);
System.out.println();
if(6==i)
{
if(Thread.currentThread().getName().equals("F1中的线程ee"))
{
this.msg="由F1中的线程共享的对象xc81的msg,被F1中的线程ee改变了,导致F1中的另一个线程ff的输出也改变了";
}
else if(Thread.currentThread().getName().equals("F2中的线程ee"))
{
this.msg="F2中的线程ee,改变了它使用的对象xc81的msg的内容,没有影响F2中的另一个线程ff的输出";
}
}
try
{
Thread.sleep(2000);
}
catch(Exception e)
{
}
}
}
String msg;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯