问个多线程实例化的问题

卡卡的喵 2018-06-21 04:45:46
先上代码

class SyncThread implements Runnable {

public void run() {
//do something
}

}

public class Demo00 {
public static void main(String args[]){

//第一种
SyncThread s1 = new SyncThread();
SyncThread s2 = new SyncThread();
Thread t1 = new Thread(s1);
Thread t2 = new Thread(s2);

t1.start();
t2.start();

//第二种
SyncThread s = new SyncThread();
Thread t1 = new Thread(s);
Thread t2 = new Thread(s);

t1.start();
t2.start();
}
}


请问第一种实例化方式和第二种实例化方式有什么区别吗?
...全文
230 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuailhw123 2018-06-22
  • 打赏
  • 举报
回复
http://www.verejava.com/?id=17236617240060
崔宏亮 2018-06-21
  • 打赏
  • 举报
回复
我认为没有太大区别
verejava 2018-06-21
  • 打赏
  • 举报
回复
并发编程 之 线程 售票排队例子

http://www.verejava.com/?id=17236617240060
weixin_40852944 2018-06-21
  • 打赏
  • 举报
回复
//第一种
SyncThread s1 = new SyncThread();
SyncThread s2 = new SyncThread();
Thread t1 = new Thread(s1);
Thread t2 = new Thread(s2);
这个你是new了2个对象,分别启动多线程;
//第二种
SyncThread s = new SyncThread();
Thread t1 = new Thread(s);
Thread t2 = new Thread(s);
这是你new了一个对象,在2个线程中分区去执行
(打个比方。。。第一种情况就是2头猪,分别装在了一个箱子里。第二种情况是1头猪,装在了2个箱子里(虽然不太恰当。。。))
stacksoverflow 2018-06-21
  • 打赏
  • 举报
回复
或者针对this做同步的话也会不一样。
stacksoverflow 2018-06-21
  • 打赏
  • 举报
回复
但就上面的代码论,没有区别,因为对象的方法本身在方法区就是一份。
但对象在堆内存中是多份,也就是如果你的SyncThread包涵一些类变量的话,那就不一样了。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧