我们常说的主线程就是Main线程,它是一个特殊的单线程,话不多说,直接撸码:

定义一个用于测试的demo类Person

package demo;public class Person {public String name;public Person(String name){this.name=name;}public void run(){int i=1;while (i<5){System.out.println(name+i);i++;}}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

编写main方法

package demo;public class MainThreadDemo {public static void main(String[] args) {Person per=new Person("常威");per.run();Person Per2=new Person("来福");Per2.run();}
}

运行结果就已经很显而易见了,放心我不是靠你们运行结果而是单纯的先分析主线程。

运行结果:常威1常威2常威3常威4来福1来福2来福3来福4

1. 分析主线程原理

2. 单线程的局限性

单线程不仅效率低下,而且存在很大的局限性,惟一的优点就是安全。所以说女孩子长得安全其实也是一种优点,噗哈哈哈…

如何体现出单线程效率低下以及它的局限性呢?其实只要一句代码即可,还是以上面的单线程Main线程为例:

package demo;public class MainThreadDemo {public static void main(String[] args) {Person per=new Person("常威");per.run();int a=6/0;  //=====================特别注意这行代码Person Per2=new Person("来福");Per2.run();}
}


如果对上面的运行结果有问题,或者疑问。那没错了,你简直是个天(小)才(白)!真真的天(小)才(白),很有可能异常机制没学好,好吧我给你贴出来:【java基础之异常】死了都要try,不淋漓尽致地catch我不痛快!

言归正传,效率低下何以见得?这是数据少,如果是一亿条数据呢,单线程就是一个一个打印。那局限性又何以见得呢?从上面运行结果来看也能看出,只因为一行代码而导致下面代码不再执行。已经很明显了。

补充:主线程的优先级

package fourteen;public class Demo {public static void main(String[] args) {System.out.println(Thread.currentThread().getName()+"优先级:"+Thread.currentThread().getPriority());}
}

运行结果:

main优先级:5

由于线程的优先级别分为三等,由常量值组成,其中10为最高级优先级,5为中级优先级,1为低级优先级,所以主线程属于中级优先级。

(三)并发编程:特殊的一个单线程:主线程(Main线程)相关推荐

  1. Day14作业 三、编程题 写一个Student类,属性:名字,年龄,分数,班级 (注意分包)

    三.编程题 写一个Student类,属性:名字,年龄,分数,班级 (注意分包) 写一个测试类:创建一个集合,里面装6个学生(有三个班级class01,class02,class03) 例如:list. ...

  2. 【EventBus】事件通信框架 ( 发送事件 | 判断发布线程是否是主线程 | 子线程切换主线程 | 主线程切换子线程 )

    文章目录 前言 一.根据不同的线程模式进行不同的线程切换操作 二.完整代码示例 前言 发布线程发布事件之后 , 消息中心需要转发这些事件 , 并执行相应的订阅方法 ; 在转发的过程中 , 需要针对订阅 ...

  3. python threading-单线程 多线程 主线程 子线程 setDeamon join

    python threading-单线程 多线程 主线程 子线程 setDeamon join 单线程 多线程 主线程和子线程 setDaemon() join() 测试多线程下程序运行的时间 创建多 ...

  4. android 主线程调用,Android 主线程和线程之间相互发送消息

    通过分析Activity源码,我们知道每个Activity都有一个Looper,所以主线程在接收Message是不需要调用Looper.prepare()和Looper.loop(),但是线程是不带L ...

  5. QT 主线程子线程互相传值

    本文实现了主线程给子线程传值.子线程给主线程传值.主线程子线程的互相传值.线程源文件mythread.h..cpp:主线程文件mainwindow.h..cpp;下面程序先从主线程调用子线程,子线程给 ...

  6. Cpython解释器下实现并发编程——多进程、多线程、协程、IO模型

    一.背景知识 进程即正在执行的一个过程.进程是对正在运行的程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所有内容都 ...

  7. java并发编程基础系列(五): 创建线程的四种方式

    线程的创建一共有四种方式: 继承于Thread类,重写run()方法: 实现Runable接口,实现里面的run()方法: 使用 FutureTask 实现有返回结果的线程 使用ExecutorSer ...

  8. Java并发编程之(二)管程

    本博客转载自<奔跑的猪的博客> 本文中的代码可以在github上找到,有需要的请自行下载 标题 定义 维基百科中定义管程为:在并发编程中,管程(monitor)为一个同步结构,具有线程互斥 ...

  9. 并发编程(六):管程

    文章目录 [关于作者] 1.是什么 2.MESA模型 2.1.解决互斥问题 2.2.解决同步问题 wait() 的正确姿势 2.3.Hasen 模型.Hoare 模型和 MESA 模型的核心区别 2. ...

最新文章

  1. 实例化servlet的几种方式
  2. CCAI 2020 | 韦峻青:当我们说起自动驾驶
  3. Apache Maven 入门篇
  4. LiveVideoStack线上分享第三季(二):对话机器人与儿童电子消费品
  5. java面向对象各章节教程_第二部分java面向对象编程第08章集合框架List1章节.ppt...
  6. 计算机入门 姚班,清华“姚班”:学霸中的尖子生,大佬毕业后都去哪了?
  7. python跳出if条件_带你学python基础:条件控制if与循环语句while、for 以及range函数...
  8. 华为天才少年一人打造自动驾驶!
  9. FLOPs和模型参数计算
  10. 数据提取软件----GetData
  11. 连上WiFi后,笔记本离路由器比较近时,电脑播音偶尔卡音
  12. Openproj 在64位操作系统报错errno=193
  13. BIOS之内存控制器设置以及内存电路接口分析
  14. 永久消除自动产生的QQPCMgr
  15. 设置来电铃声android,设置默认来电铃声 android
  16. PDF如何修改,PDF怎么删除其中一页
  17. 如何入驻832优选平台
  18. StringBuffer之间的比较、String和StringBuffer的比较
  19. 7-7 厘米换算英尺英寸 (10分)
  20. java生成图片水印

热门文章

  1. 浅谈如何进行网站结构优化
  2. 玩战塔英雄不显示服务器,王者荣耀的这个问题,国家点名了仍没有改正过来!战塔英雄就没有...
  3. 关于sizeof(arr)/sizeof(arr[0])解读(plus细节讲解增加)
  4. 活码生成器是什么?怎么用活码生成器制作活码?有没有免费的活码生成器?
  5. 自定义CollapsingToolbaLayout完成可收缩的带头像的Toolbar
  6. 关于安装李沐深度学习d2l包报错的解决办法(保姆教程)
  7. 贵州大学计算机类是211吗,贵州大学排名,唯一一所211排名一百以后,本科一批只有两所...
  8. 0DAY零距离(很经典的一片文章,找了好久)
  9. 详解EC11编码器示波器波形图
  10. XManager5连接CentOS7