线程基础的一些理解(一)(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 ...
随机推荐
- 手机app有了短信验证码还有没必要有图片验证码?
当然有必要,这里我们来聊一个恶意短信验证的案例,通过这个案例我们就能更好理解短信验证码和图片验证码这两者的关系了. 讨论防止恶意短信验证之前,我们先来看看什么是恶意短信验证及出现的原因. 恶意短信验证 ...
- Java Calender 类详解
一. 如何创建 Calendar 对象 Calendar 是一个抽象类, 无法通过直接实例化得到对象. 因此, Calendar 提供了一个方法 getInstance,来获得一个Calendar ...
- php防sql注入过滤代码
防止sql注入的函数,过滤掉那些非法的字符,提高sql安全性,同时也可以过滤XSS的攻击. function filter($str) { if (empty($str)) return false; ...
- java urlrewrite实现伪静态化
1.示例 http://www.onlyfun.com/goods/company.jsp?companyId=455326 ==> http://www.onlyfun.com/company ...
- GoLang学习控制语句之for
for结构简介 Go语言只有for循环这一种循环结构,Go语言中的for循环语句的三个部分不需要用括号括起来,但循环体必须用 { } 括起来.基本的for循环包含三个由分号分开的组成部分: 初始化语句 ...
- go generate命令有啥作用呢?
go generate命令其实就是用来生成代码用的,一般情况下需要配置其他工具和库一起使用 go官网有个实例: painkiller.go package painkiller type Pill i ...
- 遗忘Windows Server 2008R2密码的处理方法
遗忘Windows Server 2008R2的处理方法 有的时候,我们会由于各种原因忘掉了服务器密码,比如服务器太多,太杂什么的,或直接是被人黑掉了,这个时候我们想要登录,发现我们已经没有办法了,其 ...
- Xamarin Forms MVVM实现效果说明
实体对象定义Model2 和Model均可 实现响应效果 public class BaseModel : INotifyPropertyChanged { private bool _select ...
- 插入排序的Java代码实现
插入排序也是一类非常常见的排序方法,它主要包含直接插入排序,Shell排序和折半插入排序等几种常见的排序方法. 1.直接插入排序 直接插入排序的思路非常简单:依次将待排序的数据元素按其关键字值的大小插 ...
- CentOS 7.5 安装与配置 Percona Server 5.7
个人比较喜欢 MYSQL 的轻量,今天花了一点时间把阿里云上的 MYSQL5.7 换成了 Percona-Server .Percona 是一个开源的 MySQL 衍生版,TokuDB 的数据库引擎使 ...