多线程

线程就是程序中单独顺序的流控制。线程本身不能运行,它只能用于程序中。线程是程序内的顺序控制流,只能使用分配给程序的资源和环境。
多线程则指的是在单个程序中可以同时运行多个不同的线程执行不同的任务。
同其他大多数编程语言不同,Java内置支持多线程编程(multithreaded programming)。
多线程编程的目的,就是"最大限度地利用CPU资源",当某一线程的处理不需要占用CPU而只和I/O等资源打交道时,让需要占用CPU资源的其它线程有机会获得CPU资源。从根本上说,这就是多线程编程的最终目的。当程序启动运行时,就自动产生一个线程,主方法main就在这个主线程上运行。一个进程可以包含一个或多个线程。一个程序实现多个代码同时交替运行就需要产生多个线程。CPU随机的抽出时间,让我们的程序一会做这件事情,一会做另外一件事情。
多任务处理被所有的现代操作系统所支持。然而,多任务处理有两种截然不同的类型:基于进程的和基于线程的。基于进程的多任务处理是更熟悉的形式。进程(process)本质上是一个执行的程序。因此基于进程的多任务处理的特点是允许你的计算机同时运行两个或更多的程序。举例来说,基于进程的多任务处理使你在运用文本编辑器的时候可以同时运行Java编译器。在基于进程的多任务处理中,程序是调度程序所分派的最小代码单位。而在基于线程(thread-based)的多任务处理环境中,线程是最小的执行单位。这意味着一个程序可以同时执行两个或者多个任务的功能。例如,一个文本编辑器可以在打印的同时格式化文本。
多个进程的内部数据和状态都是完全独立的,而多线程是共享一块内存空间和一组系统资源,有可能互相影响。线程本身的数据通常只有寄存器数据,以及一个程序执行时使用的堆栈,所以线程的切换比进程切换的负担要小。
Java多线程的优点就在于取消了主循环/轮询机制。一个线程可以暂停而不影响程序的其他部分。例如,当一个线程从网络读取数据或等待用户输入时产生的空闲时间可以被利用到其他地方。多线程允许活的循环在每一帧间隙中沉睡一秒而不暂停整个系统。Java运行系统在很多方面依赖于线程,所有的类库设计都考虑到多线程。实际上,Java使用线程来使整个环境异步。这有利于通过防止CPU循环的浪费来减少无效部分。
全部评论

相关推荐

投票
航天二级公司 jg业务 总包20到25,无宿舍,免费早午饭
点赞 评论 收藏
分享
#阿里国际##暑期实习#Timeline:4.11投递4.18 一面。 面完立马约了2面4.23二面部门leader。隔了三天传面评4.29笔试5.9三面转部门后的leader。隔了个五一估计北京没hc了被扔到广州。5.10 hr面5.15 oc一面 47min聊项目10min线程有几种状态讲讲Spring AOC 和 IOPhashmap底层结构java线程池核心参数反射讲讲项目中如何使用AOP的讲讲**@Autowired和@Resource**synchronized锁膨胀机制CAS怎么实现的抽象类和接口区别Redis过期策略和内存淘汰策略缓存穿透、击穿、雪崩,以及如何解决布隆过滤器实现原理如何设计布隆过滤器里面的哈希函数讲讲项目中用到的设计模式MySql事务隔离级别脏读、幻读、不可重复读。解决方案?数据库表设计,如何存身份证。无手撕总结:面试官人特别好,提问之后每次回答问题都会给与反馈,情绪价值拉满了属于是二面 50min聊项目15minConcurrentHashMap底层实现并发关键字有哪些类加载过程JVM内存结构GC常用垃圾回收器、回收算法、JVM内存分配策略内存泄漏如何排查MySql常见索引和使用场景索引失效、优化慢查询聊聊undo、redo、binlogRedis常用数据结构有哪些使用场景,项目中怎么用的Redis持久化实现如何实现高可用、主从复制过程如何判断主节点故障、哨兵如何进行故障转移手撕:岛屿数量数据库存单表数据量很大怎么存储,聊了下分库分表、分布式缓存负载均衡、扩容缩容问题、一致性哈希原理。三面60min深挖项目30minMVCC实现原理MySql索引有哪些innodb索引用什么实现,为什么B树、B+树、红黑树优缺点TCP为什么只要三次握手,为什么四次挥手,三次行吗Java 在自己的项目里写同样的包名比如String 能编译通过吗?能运行吗?聊了下类加载过程,双亲委派机制如何打破双亲委派机制,实现自己的string和自定义方法redis如何保证高可用。主从复制、哨兵、集群。后面开始闲聊。。。
查看41道真题和解析
点赞 评论 收藏
分享
点赞 6 评论
分享
牛客网
牛客企业服务