线程基础的一些理解(一)(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 ...
随机推荐
- vue+iview实现一行平均五列布局
iview 的栅格布局是以 html代码部分: <Row :gutter="20"> <Col style="float: left;width: 20 ...
- MVC3学习:实现文章上一篇下一篇链接
文章的显示都是通过id查询数据库来显示.但是文章会经常删除,因此id号可能不是连续的,所以上一篇下一篇文章,不能简单的做id加减法. 我的思路是:先将表格中所有文章的ID号全部放入一个数组中,如果文章 ...
- Mac下使用Typora的一些简单操作
说明: 以下方法并不是唯一的,我只是选择了我验证成功或者比较喜欢的一种 以下基本所有操作符都是在英文输入法下进行的,中文输入法有时下达不到所要的效果 如果您在浏览本博文的时候发现有侵权行为,请及时与博 ...
- C# 字符串操作详解
MSDN关于String的所有Method 1.字符串转字符数组 (1).ToCharArray()方法,源码如下: 调用代码: var str = "Hello World"; ...
- 微信小程序开发环境搭建
关注,QQ群,微信应用号社区 511389428 微信小程序可谓是今天最火的一个名词了,一经出现真是轰炸了整个开发人员,当然很多App开发人员有了一个担心,微信小程序的到来会不会给移动端App带来一个 ...
- CentOS7下搭建FastDfs(V5.11)+Keepalived分布式集群部署
FastDfs介绍 http://kb.cnblogs.com/page/82280/ 1.准备 系统 CentOS7 最小化安装. #VIP虚拟IP 10.1.6.218 #Keepalived 1 ...
- mysql 删除单表内多个字段重复的数据
mysql 删除单表内多个字段重复的数据 DELETE from lot_log_payflow WHERE (pay_no,sub_flow_type) in () s1) AND id ) s2) ...
- JDK8简化if-else
简化if-else 1234567891011 User user = ...if (user != null) { String userName = user.getUserName(); if ...
- 如何设置httpd-mpm-conf的参数
原文链接:http://blog.sina.com.cn/s/blog_626998030102wohs.html 首先确定apache是使用哪种工作模式是prefork模式还是worker模式查看方 ...
- html中img图片居中
直接看代码 style="display:block; margin:0 auto;" 可以看到,蓝色的代码是让 块状元素居中 而红色的代码,是让img转成块状元素 ···原来im ...