理解单线程和多线程的区别
单线程和多线程
首先我们都知道线程是隶属于进程的,单线程就是程序中只有一个线程,多线程就是程序中有多个线程.通过连个例子理解多线程和单线程.
(一)单线程
创建包: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线程,这也体现了多线程执行的特点,每个线程的执行顺序和操作系统的调度有关。
有所收获别忘了点赞呦~
理解单线程和多线程的区别相关推荐
- 单线程与多线程的区别
程序是什么? 程序是由源代码生成的可执行应用. 什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源. 而一个进程又是由多个线程所组成的. 什 ...
- java单线程和多线程的区别
1.单线程和多线程的区别? 你早上上班,正要打卡的时候,手机响了..你如果先接了电话,等接完了,在打卡,就是单线程. 如果你一手接电话,一手打卡.就是多线程. 这两件事的结果是一样的..你接了电话且打 ...
- 单线程、多线程的区别
程序.进程.线程 程序:由源代码生成的可执行应用. (例如:QQ.app) 进程:一个正在运行的程序可以看做一个进程,(例如:正在运行的QQ警示一个劲曾),进程拥有独立运行所需要的全部资源 线程:程序 ...
- 什么是单线程和多线程,单线程与多线程的区别
什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源. 而一个进程又是由多个线程所组成的. 什么是线程? 线程是程序中的一个执行流,每个线程都有自己的 ...
- python单线程和多线程的区别
多线程与单线程的区别 1.生活举例 你早上上班,正要打卡的时候,手机响了..你如果先接了电话,等接完了,在打卡,就是单线程. 如果你一手接电话,一手打卡.就是多线程,2件事的结果是一样的..你接了电话 ...
- 单线程和多线程的区别_谷歌下载东西超慢?开启Chrome多线程下载,下载速度提升10倍+...
用谷歌浏览器下载速度慢,浏览器采用的是单线程下载,"一人难敌四手"的浏览器自然斗不过多线程了.所以说浏览器想要提高下载速度,就得采用多线程的下载方式,不过到目前为止,Chrome多 ...
- 单线程和多线程的区别
前端精髓 每日为你推送 假设业务场景中有一组互不相关的任务需要完成,现行的主流方法有以下两种. 单线程串行依次执行. 多线程并行完成. 如果创建多线程的开销小于并行执行,那么多线程的方式是首选的.多线 ...
- Redis 属于单线程还是多线程?不同的版本有什么区别?
Redis 是普及率最高的技术之一,同时也是面试中必问的一个技术模块,所以从今天开始我们将从最热门的 Redis 面试题入手,更加深入的学习和了解一下 Redis. 我们本文的面试题是 Redis 属 ...
- 快速理解Java单线程和多线程比较
单线程是一个一个线程顺序执行,一个线程只有当前一个线程执行完之后才能执行.这种方法可以会导致当某个线程等待响应的时间特别长时,下一个线程需要一直等待,而这时CPU处于空闲. 多线程是一个时间段一个时间 ...
最新文章
- linux下如何查看系统和内核版本
- 第十七届智能车竞赛英飞凌专题培训 ——英飞凌无刷电机驱动专题
- 三、K3 Cloud 开发插件《K3 Cloud插件开发新手指导 + K3 Cloud插件开发代码调试》
- UIImage加阴影
- php无get报错,php $_get报错怎么办
- PHP移动互联网开发笔记(3)——运算符
- 中科院研究员:教给孩子的数学浅得让人想哭
- Android中的savedInstanceState
- python获取app信息的库_基于python3抓取pinpoint应用信息入库
- 部署git服务器(Windows Server 2008)
- Python爬虫入门学习线路图2019最新版
- 拍拍二手重装上阵,京东剑指闲鱼胜算几何?
- 完美数Python解法
- 前端成长之路之打好根基
- 杯中悬佳酿,唇齿香气浓
- Win10/Win7 打印机 [有线局域网共享]
- SAP中采购订单历史分类标识与实际业务描述
- VB.NET 文本框获得焦点
- JVM(Java虚拟机模型、Java运行时数据区模型)
- SAS软件介绍单元测验
热门文章
- 多个集合积-笛卡尔积
- c++ advanced(8) std::variant from beginner to expert
- 设计模式 | 观察者模式/发布-订阅模式(observer/publish-subscribe)
- 你选择开发工程师做为自已的职业
- 云原生下一步的发展方向
- C#调用CodeSoft控制两台打印机打印
- 亚马逊上传产品时出现错误代码“5461”怎么解决?
- 外派到某项目帮忙,但受到排斥怎办?
- 三相PWM四象限可控整流器,网侧电压与电流同相位
- mysql查看指定数据库的定义声明(字符集等信息)