JAVA多线程问题

J2EE 码拜 9年前 (2015-04-22) 869次浏览 0个评论

public static void main(String[] args) {
for(int i = 0 ;i<5 ;i++){
if(0 == i){
new MyThread1().start();
}else if(1 ==i){
new MyThread2().start();
}else if(2 ==i){
new MyThread3().start();
}else if(3 ==i){
new MyThread4().start();
}else if(4 ==i){
new MyThread5().start();
}

                }
}

这种写法算是多线程吗?

JAVA多线程问题
这是多个线程,但没有并发操作,所以,我觉得不能算作真正意义的多线程
JAVA多线程问题
多线程必须是同时启动,并发运行的。你的循环操作只是依次启动不同的线程,不算是并发,你可以把循环和if..else去掉,那就是多线程并发了。
JAVA多线程问题
是,都是这样写的。
JAVA多线程问题
是的,是多线程,一共有六个线程在运行,主线程和1、2、3、4、5线程。只不过程序中for循环和if判断都是多余的,你的代码实际效果是这样:
public static void main(String[] args) {
new MyThread1().start();
new MyThread2().start();
new MyThread3().start();
new MyThread4().start();
new MyThread5().start();
}

引用 1 楼 magi1201 的回复:

这是多个线程,但没有并发操作,所以,我觉得不能算作真正意义的多线程

这个是并发的,你假设1、2、3、4、5线程是需要长时间运行的,就会发现,这5个线程同时在运行。

引用 2 楼 zhb_1026 的回复:

多线程必须是同时启动,并发运行的。你的循环操作只是依次启动不同的线程,不算是并发,你可以把循环和if..else去掉,那就是多线程并发了。

多线程不必须是同时启动的,假如有一个线程运行了一半,这是再增加一个新线程与之并行,也叫做并发。

JAVA多线程问题
引用 4 楼 stonefeng 的回复:

是的,是多线程,一共有六个线程在运行,主线程和1、2、3、4、5线程。只不过程序中for循环和if判断都是多余的,你的代码实际效果是这样:
public static void main(String[] args) {
new MyThread1().start();
new MyThread2().start();
new MyThread3().start();
new MyThread4().start();
new MyThread5().start();
}

Quote: 引用 1 楼 magi1201 的回复:

这是多个线程,但没有并发操作,所以,我觉得不能算作真正意义的多线程。

这个是并发的,你假设1、2、3、4、5线程是需要长时间运行的,就会发现,这5个线程同时在运行。

引用 2 楼 zhb_1026 的回复:

多线程必须是同时启动,并发运行的。你的循环操作只是依次启动不同的线程,不算是并发,你可以把循环和if..else去掉,那就是多线程并发了。

多线程不必须是同时启动的,假如有一个线程运行了一半,这是再增加一个新线程与之并行,也叫做并发。

到底谁是对的呀

JAVA多线程问题
引用 2 楼 zhb_1026 的回复:

多线程必须是同时启动,并发运行的。你的循环操作只是依次启动不同的线程,不算是并发,你可以把循环和if..else去掉,那就是多线程并发了。

那我这种写法是单线程 对吗

JAVA多线程问题
没人了吗  顶起来
JAVA多线程问题
别纠结了,你想想为何要多线程?是不是同时多个任务在执行?至于是不是同时启动的,有关系吗?有些情况下就是不能同时启动的,比方说你在拷一个大文件,考了一半,你播放MP3听歌,难道不允许吗?难道就不算多任务了?非要在开始拷贝的时候就开始听歌?你仔细想想,这还用问吗?回答这问题的那位仁兄也想想。
JAVA多线程问题
引用 5 楼 Leo55888 的回复:
Quote: 引用 4 楼 stonefeng 的回复:

是的,是多线程,一共有六个线程在运行,主线程和1、2、3、4、5线程。只不过程序中for循环和if判断都是多余的,你的代码实际效果是这样:
public static void main(String[] args) {
new MyThread1().start();
new MyThread2().start();
new MyThread3().start();
new MyThread4().start();
new MyThread5().start();
}

Quote: 引用 1 楼 magi1201 的回复:

这是多个线程,但没有并发操作,所以,我觉得不能算作真正意义的多线程。

这个是并发的,你假设1、2、3、4、5线程是需要长时间运行的,就会发现,这5个线程同时在运行。

引用 2 楼 zhb_1026 的回复:

多线程必须是同时启动,并发运行的。你的循环操作只是依次启动不同的线程,不算是并发,你可以把循环和if..else去掉,那就是多线程并发了。

多线程不必须是同时启动的,假如有一个线程运行了一半,这是再增加一个新线程与之并行,也叫做并发。

到底谁是对的呀

4楼的是正解,理论上不可能同时启动的,并发性取决于线程的生命周期

JAVA多线程问题
我觉得这帖子会被加精,等大婶解释,学习一下。
我也觉得4楼说的对
JAVA多线程问题
引用 4 楼 stonefeng 的回复:

是的,是多线程,一共有六个线程在运行,主线程和1、2、3、4、5线程。只不过程序中for循环和if判断都是多余的,你的代码实际效果是这样:
public static void main(String[] args) {
new MyThread1().start();
new MyThread2().start();
new MyThread3().start();
new MyThread4().start();
new MyThread5().start();

我的那种写法都在FOR循环里 会不会出现先执行MyThread1线程  当MyThread1执行完了之后才开始执行myThread2

JAVA多线程问题
引用 10 楼 luoyeyeyu 的回复:

我觉得这帖子会被加精,等大婶解释,学习一下。
我也觉得4楼说的对

哎  弄晕了 

JAVA多线程问题
引用 3 楼 u011461314 的回复:

是,都是这样写的。

那别人说 几个线程并发执行, 在上面的代码中  有没有体现出来啊

JAVA多线程问题
20分
引用 11 楼 Leo55888 的回复:
Quote: 引用 4 楼 stonefeng 的回复:

是的,是多线程,一共有六个线程在运行,主线程和1、2、3、4、5线程。只不过程序中for循环和if判断都是多余的,你的代码实际效果是这样:
public static void main(String[] args) {
new MyThread1().start();
new MyThread2().start();
new MyThread3().start();
new MyThread4().start();
new MyThread5().start();

我的那种写法都在FOR循环里 会不会出现先执行MyThread1线程  当MyThread1执行完了之后才开始执行myThread2

晕!刚开始学java吧?有些概念你还没搞清楚啊。
1、start方法是告诉系统这个线程可以运行了,至于什么时候运行,由说了算。
2、无论如何你的主线程以在同一时间只能运行一行代码,严格意义上说,这5条语句是顺序执行的,也不是同时执行的。所以没有严格意义上的同时启动,都是有先后的。
3、如果线程1很短,一瞬间就完成了,那么很有可能线程1运行完了线程2才启动(但具体也不好说),如果1需要稍长一点儿的时间,2就有很可能并行,至于是否能并行,因素很多,比如硬件有几个核,操作系统调度机制,线程1是否会让度运行时间……这都因素都会影响多线程行为。

JAVA多线程问题
落下两字,补充:1、start方法是告诉系统这个线程可以运行了,至于什么时候运行,由“系统”说了算。
JAVA多线程问题
引用 14 楼 stonefeng 的回复:
Quote: 引用 11 楼 Leo55888 的回复:
Quote: 引用 4 楼 stonefeng 的回复:

是的,是多线程,一共有六个线程在运行,主线程和1、2、3、4、5线程。只不过程序中for循环和if判断都是多余的,你的代码实际效果是这样:
public static void main(String[] args) {
new MyThread1().start();
new MyThread2().start();
new MyThread3().start();
new MyThread4().start();
new MyThread5().start();

我的那种写法都在FOR循环里 会不会出现先执行MyThread1线程  当MyThread1执行完了之后才开始执行myThread2

晕!刚开始学java吧?有些概念你还没搞清楚啊。
1、start方法是告诉系统这个线程可以运行了,至于什么时候运行,由说了算。
2、无论如何你的主线程以在同一时间只能运行一行代码,严格意义上说,这5条语句是顺序执行的,也不是同时执行的。所以没有严格意义上的同时启动,都是有先后的。
3、如果线程1很短,一瞬间就完成了,那么很有可能线程1运行完了线程2才启动(但具体也不好说),如果1需要稍长一点儿的时间,2就有很可能并行,至于是否能并行,因素很多,比如硬件有几个核,操作系统调度机制,线程1是否会让度运行时间……这都因素都会影响多线程行为。

恩  明白了  谢谢耐心回复

JAVA多线程问题
这问题问的。。

算多线程。。。。你放心吧,这代码放哪都是多线程。

JAVA多线程问题
引用 6 楼 Leo55888 的回复:
Quote: 引用 2 楼 zhb_1026 的回复:

多线程必须是同时启动,并发运行的。你的循环操作只是依次启动不同的线程,不算是并发,你可以把循环和if..else去掉,那就是多线程并发了。

那我这种写法是单线程 对吗

这个跟你的线程运行时间是有关系的,只要能够让多个线程同时在运行就是并发,所以不要太纠结于怎么启动的。我上面只是针对你写的程序说了一下


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明JAVA多线程问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!