请问个java中多线程的问题

leetow2006 2019-09-10 02:06:26
请看:
public class TestThread {

public static void main(String[] args) {
// TODO 自动生成的方法存根
Thread2 mt1=new Thread2("线程1");
Thread2 mt2=new Thread2("线程2");
Thread2 mt3=new Thread2("线程3");

new Thread(mt1).start();
new Thread(mt2).start();
new Thread(mt3).start();
}

}

class Thread2 implements Runnable{
private String name;
public Thread2(String name){
this.name=name;
}
@Override
public void run() {
// TODO 自动生成的方法存根
for(int i=0;i<500;i++){
System.out.println(this.name+"--->"+i);
}
}

}
那么此时是有三个子线程,分别是线程1、线程2、线程3;
但是我在看《第一行代码--java》书的数据共享时,
我根据书中的代码,把以上的程序改了(只改不同的部分):
public class TestThread {

public static void main(String[] args) {
// TODO 自动生成的方法存根
Thread2 mt1=new Thread2("线程1");

new Thread(mt1).start();
new Thread(mt1).start();
new Thread(mt1).start();
}

}
可是我感觉这样运行的,好像只有一个子线程,请问是一个子线程还是三个子线程?
另外:我的两种不同的代码有什么区别?
...全文
144 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
leetow2006 2019-09-11
  • 打赏
  • 举报
回复
看了各位的回帖,理解了很多,非常感谢
Theseuss 2019-09-10
  • 打赏
  • 举报
回复
线程不会这么干的吧,这么干实际上在三个线程处理一个任务了!这不是使用线程的初衷吧。
qq_39936465 2019-09-10
  • 打赏
  • 举报
回复
第一段程序因为是mt1,mt2,mt3 3个 实例化类,所以3个线程相互之间不会影响。 第二段程序因为3个线程共用了mt1的数据, 所以有可能会相互之间产生影响,一般有共享数据都需要加锁。
qybao 2019-09-10
  • 打赏
  • 举报
回复
引用 4 楼 leetow2006 的回复:
核心是 Runnable 的实现类,三个线程共用了,实现的逻辑是一样的。
==================
这句话怎么理解?什么叫三个线程共用Runnable 的实现类?

线程共享资源的概念有吗?如果没有现在网上找资料理解这个概念
三个线程共享一个Runnable,也就是三个线程共享mt1,共同执行mt1的run方法
qq_39936465 2019-09-10
  • 打赏
  • 举报
回复
引用 4 楼 leetow2006 的回复:
核心是 Runnable 的实现类,三个线程共用了,实现的逻辑是一样的。 ================== 这句话怎么理解?什么叫三个线程共用Runnable 的实现类?
Theard2 这个类 就是Runnable这个接口的实现类。
leetow2006 2019-09-10
  • 打赏
  • 举报
回复
核心是 Runnable 的实现类,三个线程共用了,实现的逻辑是一样的。
==================
这句话怎么理解?什么叫三个线程共用Runnable 的实现类?
qybao 2019-09-10
  • 打赏
  • 举报
回复
3个线程
前一种是每个线程的名字不同,后一种是每个线程的名字相同(注意 但是线程ID不同,你可以在System.out.println(this.name+"--->"+i);后面打印Thread.curruntTreand().getId()看看)
oh_Maxy 2019-09-10
  • 打赏
  • 举报
回复
核心是 Runnable 的实现类,三个线程共用了,实现的逻辑是一样的。
3个new Thread,是3个不一样的线程,共用一个内核逻辑,
如果有成员属性或者数据共享,可能会有并发问题。
qq_39936465 2019-09-10
  • 打赏
  • 举报
回复
引用 楼主 leetow2006 的回复:
可是我感觉这样运行的,好像只有一个子线程,请问是一个子线程还是三个子线程? 另外:我的两种不同的代码有什么区别?
是3个线程,前面的程序可能是3个不同的 线程,后面的是3个相同的线程。

62,614

社区成员

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

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