单线程和多线程

首先我们都知道线程是隶属于进程的,单线程就是程序中只有一个线程,多线程就是程序中有多个线程.通过连个例子理解多线程和单线程.

(一)单线程

创建包:package com.ffyc.javathread;

创建类:public class Sample { }

package com.ffyc.javathread;
public class Sample {//方法1public void method1(){System.out.println("method1");}//方法2public void method2(){method1();System.out.println("method2");}/***主方法(主线程),程序的入口* 这不是多线程案例,是单线程* @param args*/    public static void main(String[] args) {System.out.println("主线程开始");Sample s = new Sample();s.method2();System.out.println("主线程结束");}
}

上面的程序,我们很容易看懂,从main方法进入程序后,打印输出,创建Sample类的对象,然后调用了method2()方法,进入method2()方法后又调用method1()方法,执行完后再一次打印输出,执行过程看下图:

从上图不难发现,程序是顺着main方法这条主线一气呵成执行完的,所以这是一个单线程。

(二)多线程

package com.ffyc.javathread.demo2;import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;public class MyThread implements Runnable {/*
* 我们自己写的MyThread类实现Runnable接口,这个不叫线程类
* 只能叫线程要执行的任务
* */@Overridepublic void run() {//输出任务的优先级System.out.println(Thread.currentThread().getName()+": "+Thread.currentThread().getPriority());}}
package com.ffyc.javathread.demo2;public class Test {public static void main(String[] args) {/*MyThread myThread = new MyThread();    myThread. 不出start方法,无法启动线程上面的类中写过了,MyThread类不能叫线程,这个类中的内容只是线程要执行的任务*/MyThread myth = new MyThread();//创建了一线程,并为其分配了一个任务,线程名称为"窗口1"Thread th1 = new Thread(myth,"窗口1");th1.start();//创建了一线程,并为其分配了一个任务,线程名称为"窗口2"Thread th2 = new Thread(myth,"窗口2");th2.start();Thread.currentThread().setPriority(10);  //设置主线程(main()方法)的优先级th1.setPriority(8);  //设置线程(窗口1)的优先级th2.setPriority(6);   //设置线程(窗口2)的优先级//输出主线程的优先级System.out.println("main: "+Thread.currentThread().getPriority());}
}

在测试类()test类中创建一个任务对象即可,每创建一个线程,要执行的任务都传递创建的那一个任务对象。输出结果:

输出了三个线程的优先级。

上面的程序中,

MyThread myth = new MyThread();//创建了一线程,并为其分配了一个任务,线程名称为"窗口1"Thread th1 = new Thread(myth,"窗口1");th1.start();

这一段就是创建了线程th1,执行任务myth,给线程起名:“窗口1”。 注意,一定要调用start()方法启动线程,不能只创建,不启动。main()方法中创建了两个线程: th1 , th2 ,再加上main()这个主线程,共有三个线程,也就是多线程。

程序的输出结果中并没有按main()方法中的一步一步执行,本来先创建的是th1,但是执行时先执行的是th2线程,这也体现了多线程执行的特点,每个线程的执行顺序和操作系统的调度有关。

有所收获别忘了点赞呦~

理解单线程和多线程的区别相关推荐

  1. 单线程与多线程的区别

    程序是什么? ​ 程序是由源代码生成的可执行应用. 什么是进程? ​ 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源. 而一个进程又是由多个线程所组成的. 什 ...

  2. java单线程和多线程的区别

    1.单线程和多线程的区别? 你早上上班,正要打卡的时候,手机响了..你如果先接了电话,等接完了,在打卡,就是单线程. 如果你一手接电话,一手打卡.就是多线程. 这两件事的结果是一样的..你接了电话且打 ...

  3. 单线程、多线程的区别

    程序.进程.线程 程序:由源代码生成的可执行应用. (例如:QQ.app) 进程:一个正在运行的程序可以看做一个进程,(例如:正在运行的QQ警示一个劲曾),进程拥有独立运行所需要的全部资源 线程:程序 ...

  4. 什么是单线程和多线程,单线程与多线程的区别

    什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源. 而一个进程又是由多个线程所组成的. 什么是线程? 线程是程序中的一个执行流,每个线程都有自己的 ...

  5. python单线程和多线程的区别

    多线程与单线程的区别 1.生活举例 你早上上班,正要打卡的时候,手机响了..你如果先接了电话,等接完了,在打卡,就是单线程. 如果你一手接电话,一手打卡.就是多线程,2件事的结果是一样的..你接了电话 ...

  6. 单线程和多线程的区别_谷歌下载东西超慢?开启Chrome多线程下载,下载速度提升10倍+...

    用谷歌浏览器下载速度慢,浏览器采用的是单线程下载,"一人难敌四手"的浏览器自然斗不过多线程了.所以说浏览器想要提高下载速度,就得采用多线程的下载方式,不过到目前为止,Chrome多 ...

  7. 单线程和多线程的区别

    前端精髓 每日为你推送 假设业务场景中有一组互不相关的任务需要完成,现行的主流方法有以下两种. 单线程串行依次执行. 多线程并行完成. 如果创建多线程的开销小于并行执行,那么多线程的方式是首选的.多线 ...

  8. Redis 属于单线程还是多线程?不同的版本有什么区别?

    Redis 是普及率最高的技术之一,同时也是面试中必问的一个技术模块,所以从今天开始我们将从最热门的 Redis 面试题入手,更加深入的学习和了解一下 Redis. 我们本文的面试题是 Redis 属 ...

  9. 快速理解Java单线程和多线程比较

    单线程是一个一个线程顺序执行,一个线程只有当前一个线程执行完之后才能执行.这种方法可以会导致当某个线程等待响应的时间特别长时,下一个线程需要一直等待,而这时CPU处于空闲. 多线程是一个时间段一个时间 ...

最新文章

  1. linux下如何查看系统和内核版本
  2. 第十七届智能车竞赛英飞凌专题培训 ——英飞凌无刷电机驱动专题
  3. 三、K3 Cloud 开发插件《K3 Cloud插件开发新手指导 + K3 Cloud插件开发代码调试》
  4. UIImage加阴影
  5. php无get报错,php $_get报错怎么办
  6. PHP移动互联网开发笔记(3)——运算符
  7. 中科院研究员:教给孩子的数学浅得让人想哭
  8. Android中的savedInstanceState
  9. python获取app信息的库_基于python3抓取pinpoint应用信息入库
  10. 部署git服务器(Windows Server 2008)
  11. Python爬虫入门学习线路图2019最新版
  12. 拍拍二手重装上阵,京东剑指闲鱼胜算几何?
  13. 完美数Python解法
  14. 前端成长之路之打好根基
  15. 杯中悬佳酿,唇齿香气浓
  16. Win10/Win7 打印机 [有线局域网共享]
  17. SAP中采购订单历史分类标识与实际业务描述
  18. VB.NET 文本框获得焦点
  19. JVM(Java虚拟机模型、Java运行时数据区模型)
  20. SAS软件介绍单元测验

热门文章

  1. 多个集合积-笛卡尔积
  2. c++ advanced(8) std::variant from beginner to expert
  3. 设计模式 | 观察者模式/发布-订阅模式(observer/publish-subscribe)
  4. 你选择开发工程师做为自已的职业
  5. 云原生下一步的发展方向
  6. C#调用CodeSoft控制两台打印机打印
  7. 亚马逊上传产品时出现错误代码“5461”怎么解决?
  8. 外派到某项目帮忙,但受到排斥怎办?
  9. 三相PWM四象限可控整流器,网侧电压与电流同相位
  10. mysql查看指定数据库的定义声明(字符集等信息)