线程基础的一些理解(一)(java)
一、多线程的基本概念
线程是指进程中的一个执行场景,也就是执行流程,所以我们首先要聊一聊进程,以及进程和线程的关系
1、什么是进程?
一个进程对应一个应用程序,就像我们在windows系统中启动Word就表示启动了一个进程,在java的开发环境下启动JVM,就表示启动了一个进程。现代的计算机都是支持多进程的,在同一个操作系统中可以同时启动多个进程。那什么又是多进程呢?
2、什么是多进程,多进程有什么作用?
单进程计算机只能做一件事情,就像很久以前的计算机,只能打开一个Dos窗口,这就是单进程的。
而你平时一边打着lol(lol进程),一边听着音乐(音乐进程),这就是多进程的。那么问题来了,对于单核计算机来讲,在同一个时间点上,游戏进程和音乐进程是同时在运行吗?
不是。(多核的计算机可以同时运行,所以处理速度高),因为计算机的CPU只能在某个时间点上做一件事,由于计算机可以在“游戏进程”和“音乐进程”之间频繁的切换执行,切换速度极高,人类感觉游戏和音乐在同时进行。生活中有很多这样的例子,以前的小人书,通过快速的翻页,人就动了起来,电影一帧一帧播放,画面就动了,人类感觉是同时进行,其实是通过CPU快速的切换,是人感觉是这样的。所以多进程的作用不是提高执行速度,而是提高CPU的使用率,以前一个CPU只能做一件事,现在通过不同进程之间的切换就可以实现干多个事情。
3、什么是线程,与进程的联系?
线程是一个进程中的执行场景。一个进程可以启动多个线程。可以理解为一个进程可以包含多个线程。
4、多线程有什么作用?
同样,多线程与多进程的作用是一样的,并不是为了提高执行速度,而是提高应用程序的使用率,就像有三个人同时访问百度服务器(输入百度网址),服务器端的程序就是一个
进程,如果他是单线程的那我访问的时候,你就不能访问百度服务器,如果我们每个人都占用一个线程,服务器在我们之间频繁的切换,给我们一种错觉感觉多个线程在同时并发执行,就
可以实现很多人同时访问百度网站。线程和线程共享“堆内存和方法区内存”,栈内存是独立的,一个线程一个栈。
5.java程序的运行原理?
java命令会启动java虚拟机,启动JVM,等于启动了一个应用程序,表示启动了一个进程。该进程会自动启动一个“主线程”,然后主线程去调用某个类的main方法,所以
main方法运行在主线程中。
二、java中是如何实现多线程的
1、在java语言中实现多线程的第一种方式:
(1)继承java.lang.Thread
(2) 重写run方法。
三个知识点:
如何定义线程? 继承Thread类
如何创建线程? new 子类调用
如何启动线程? .start()方法
2、在java语言中实现多线程的第二种方式:
(1)写一个类实现java.lang.Runnable接口
(2) 实现run方法
三、线程的生命周期
线程基础的一些理解(一)(java)的更多相关文章
- Java线程基础知识(状态、共享与协作)
1.基础概念 CPU核心数和线程数的关系 核心数:线程数=1:1 ;使用了超线程技术后---> 1:2 CPU时间片轮转机制 又称RR调度,会导致上下文切换 什么是进程和线程 进程:程序运行资源 ...
- java核心技术-多线程之线程基础
说起线程,无法免俗首先要弄清楚的三个概念就是:进程.线程.协程.OK,那什么是进程,什么是线程,哪协程又是啥东西.进程:进程可以简单的理解为运行在操作系统中的程序,程序时静态代码,进程是动态运行着的代 ...
- java线程基础知识----线程基础知识
不知道从什么时候开始,学习知识变成了一个短期记忆的过程,总是容易忘记自己当初学懂的知识(fuck!),不知道是自己没有经常使用还是当初理解的不够深入.今天准备再对java的线程进行一下系统的学习,希望 ...
- java线程基础巩固---线程生命周期以及start方法源码剖析
上篇中介绍了如何启动一个线程,通过调用start()方法才能创建并使用新线程,并且这个start()是非阻塞的,调用之后立马就返回的,实际上它是线程生命周期环节中的一种,所以这里阐述一下线程的一个完整 ...
- java线程基础巩固---创建并启动线程
对于java的并发编程方面的东东,不管是面试还是实际工作开发都是非常重要的,而往往只要涉及到并发相关的东东有点让人觉得有点难,而实际工作中涉及到并发可能就是简单的用下同步块.上锁之类的一些简单的操作, ...
- java 线程基础篇,看这一篇就够了。
前言: Java三大基础框架:集合,线程,io基本是开发必用,面试必问的核心内容,今天我们讲讲线程. 想要把线程理解透彻,这需要具备很多方面的知识和经验,本篇主要是关于线程基础包括线程状态和常用方法. ...
- 线程和线程池的理解与java简单例子
1.线程 (1)理解,线程是系统分配处理器时间资源的基本单元也是系统调用的基本单位,简单理解就是一个或多个线程组成了一个进程,进程就像爸爸,线程就像儿子,有时候爸爸一个人干不了活就生了几个儿子干活,会 ...
- Java线程基础实例
概述 Java线程是一个在实战开发中经常使用的基础功能,而在Java中线程相关的类在java.lang和java.util.concurrent里 Thread package thread.base ...
- JAVA与多线程开发(线程基础、继承Thread类来定义自己的线程、实现Runnable接口来解决单继承局限性、控制多线程程并发)
实现线程并发有两种方式:1)继承Thread类:2)实现Runnable接口. 线程基础 1)程序.进程.线程:并行.并发. 2)线程生命周期:创建状态(new一个线程对象).就绪状态(调用该对象的s ...
随机推荐
- [leetcode.com]算法题目 - Triangle
Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ...
- SpringBoot使用ModelAndView时配置视图解析器
spring boot 使用视图modelandview 原文:https://www.cnblogs.com/liyafei/p/7955943.html 1:springboot使用视图解析器,添 ...
- Linux系统文件压缩与备份(5)
在 Linux 系统选有相当多的压缩命令可以使用,这些压缩指令可以让我们更方便的从网上下载大型文件,本章第一节内容我们就来谈谈这个 Linux 系统下常用的几种压缩格式吧. 谈完了压缩后,我们接着来说 ...
- python -猜字小游戏
代码运行效果如下: 注意: 1.必须要在python3环境想使用 2.QQ:3084276329(一起交流学习) 3.还请大家评论 Guess the word game代码如下: #! /usr/b ...
- java后端树形菜单使用递归方法
数据库的设计 使用ssm 实体类 mapper映射文件查询出所有的菜单 使用递归方法
- Others - On Duty
On Duty This is xxx and will be duty engineer in the next week. Thanks. Here is a kindly reminder. T ...
- Django中安装搜索引擎方法。
全文检索 全文检索不同于特定字段的模糊查询,使用全文检索的效率更高,并且能够对于中文进行分词处理. haystack:全文检索的框架,支持whoosh.solr.Xapian.Elasticsearc ...
- POJ 2771
#include <iostream> #include <string> #define MAXN 505 using namespace std; int _m[MAXN] ...
- Numpy.random中shuffle与permutation的区别(转)
huffle与permutation的区别 函数shuffle与permutation都是对原来的数组进行重新洗牌(即随机打乱原来的元素顺序):区别在于shuffle直接在原来的数组上进行操作,改变原 ...
- Firefox火狐 浏览器接口调试工具 JSON 格式化
作为一名“IT界”的淫才,还是主攻Web端的淫才,相信大家经常会联调各种接口! 如今APP猖狂的年代接口联调更为频繁,当然我们常用于Firefox火狐 浏览器,所以这里主要讲Firefox火狐 浏览器 ...