A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马---邢志伟 初级黑马   /  2012-6-16 14:38  /  2074 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马---邢志伟 于 2012-6-17 08:05 编辑

我想请教大家线程和多线程有什么区别呀。。。有点搞不明白!!!希望详细说一下,谢谢,,求助。。。

8 个回复

倒序浏览
线程是程序中一个单一的顺序控制流程。在单个程序中同时运行多个线程完成不同的工作,称为多线程。
回复 使用道具 举报
本帖最后由 龙秋地 于 2012-6-16 17:57 编辑

Java多线程和传统的单线程的区别是由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的,出现了并发访问带来的一切问题。
1.就一个人包饺子,那个就是单线程。2.对于包饺子这样的事情,多个人一起干,大家之间没有冲突,各个包自己的,那就是短线程。明显速度要快于一个人按。java多线程有两种实现方法:
有两种方法:第一、继承java.lang.Thread第二、实现Runnable接口.
  1. 继承Thread而重写了run()方法
  2.   1.public class Hello extends Thread{
  3.   2.int i;
  4.   3.public void run(){
  5.   4.while(true){
  6.   5.System.out.println("Hello "+i++);
  7.   6.if(i==10) break;
  8.   7.}}}
  9.   8.public class HelloThread {
  10.   9.public static void main(String[] args){
  11.   10.Hello h1 = new Hello();
  12.   11.Hello h2 = new Hello();
  13.   12.h1.start(); //用两个线程执行那10次循环
  14.   13.h2.start();
  15.   14.}} 上面的例子是第一种方法,下面是第二种方法
  16.   15.public class TestThread {
  17.   16.public static void main(String args[]) {
  18.   17.Xyz r = new Xyz();
  19.   18.Xyz r1 = new Xyz();
  20.   19.Thread t1 = new Thread(r);
  21.   20.Thread t2 = new Thread(r1);
  22.   21.t1.start();//用两个线程执行那50次循环
  23.   22.t2.start();
  24.   23.}} //实现Runnable接口
  25.   24.class Xyz implements Runnable {
  26.   25.int i;
  27.   26.public void run() {
  28.   27.i = 0;
  29.   28.while (true) {
  30.   29.System.out.println("Hello " + i++);
  31.   30.if ( i == 50 ) {
  32.   31.break;
  33.   32.}}}}
复制代码
回复 使用道具 举报
本帖最后由 李盼 于 2012-6-16 15:04 编辑

你应该问单线程和多线程之间的区别吧!
单线程就是按顺序依次执行,例如
main{ method1(); method2();method3();method4()........ }
那么肯定是method1()方法执行完了才会去执行method2(),如果method1()不执行完method2()永远不会执行。
多线程就是在mian线程外,另外再开启一个线程执行,例如:
main{ new Thread(new Run).start();method1();method3()......}
这个就是执行到new Thread(new Run).start()时候,启动一个新的线程去执行Run类的实例对象中的run方法。然后main线程继续执行method1()方法,此时method1()方法不需要等待run方法执行完就可以执行。

顺便给你普及下CUP是如何多线程的,其实CUP是在短时间内不停的切换线程去执行,因为切换速度很快,所以给人的感觉就是多个线程在一起执行。


再给你举个例子,甲乙两个人一起参加跑步,甲跑10000m,乙跑100m,单线程的执行过程就是如果甲先到的赛场,那么我们就让甲先跑完10000m,乙再开始跑,显然乙就要等很久了。
多线程就是裁判员看甲先来了,让他跑,然后看乙也过来了,就说:甲你先休息会,让乙跑几步,然后这个时候赛道就让乙去跑,甲就在旁边休息,乙跑了50m,裁判员又说,乙,你先休息会,让甲去跑,然后乙就停止休息,甲就去跑,这样乙也许用个一两次就跑完了100m 不需要等待甲跑完。

评分

参与人数 1技术分 +1 收起 理由
职业规划-刘倩老师 + 1 赞一个!

查看全部评分

回复 使用道具 举报
线程是代码的执行体,代码的执行是在线程里面执行的。如果你在你的程序中没有写线程,那么就只有一个主线程。
线程的代码是顺序执行的。也就是说从第一行代码开始,一直执行到最后一行代码!
多线程只的是一种写程序的思想。操作系统的课上过吧!那里面就有讲线程的。
通俗的将,线程就是你要完成一个任务。单线程就是这个任务只有你一个人去做,或许这个任务要做很多次:比如说体育课,老师要你们班跑操场10圈(总共 十圈),这个跑一圈相当于一个线程,如果只有你一个人跑(单线程),那么你就要跑完一圈后再跑一圈,一个人跑完十圈(大哥,你觉得累吗?!!!)。但是如果有十个人跑(多线程的程序),每个人只要跑一圈,那么,是不是快多了(只要你一个的时候的十分之一)!!!你是不是也没有那么累。这就是多线程的好处。
当然,在程序中并不是一定就是多线程就好,这个看具体情况而定。等过些日子你搞懂了就明白了!
回复 使用道具 举报
单线程就是程序执行时,所跑的程序路径(处理的东西)是连续顺序下来的,必须前面的处理好,后面的才会执行到。
多线程编程的目的,就是"最大限度地利用CPU资源" .
回复 使用道具 举报
刘笑 中级黑马 2012-6-16 17:50:02
7#
举个例子:你早上上班,正要打卡的时候,手机响了。。你如果先接了电话,等接完了,在打卡,就是单线程。
如果你一手接电话,一手打卡。就是多线程。
2件事的结果是一样的。。你接了电话且打了卡。
回复 使用道具 举报
多线程允许我我们充分利用资源,好比做饭的时候两个灶都开着火,一边熬汤,一边炒菜。而厨师就是cpu,可以炒着菜的时候尝尝汤是否到火候了;总比只开一个灶弄得快吧~!
程序设计的时候,我们就可以充分利用cpu资源,现在只能手机可以开着音乐播放器的同时看小说就是这个道理。
回复 使用道具 举报
打个比方,单线程就是你去厨房有烧饭又烧菜,一个人来回跑;多线程就是两个人,一个单做饭,一个单做菜。这样的解释应该比纯理论的好理解一点吧?
再补充一下,多线程就是一个CPU虚拟了几个CPU,而双核就是实际上就有两个线程了,当然,还可以每个核再去虚拟多个线程(也可以理解成多个流水线吧)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马