java线程,进程,多线程
(1)线程和进程
通俗一点,进程就是一个应用程序在处理机上的一次执行过程,它是一个动态的概念,而线程是进程中的一部分,进程包含多个线程在运行。
(2)java中实现线程的两种方式,第一种是继承Thread类,和实现Runnable接口。由于java是单继承,所以在使用多线程的时候使用第二种方法较为合适。
(3)线程的生命周期
线程的其中状态,分别为出生状态,就绪状态,运行状态,等待状态,休眠状态,阻塞状态和死亡状态。出生状态是线程创建时候的状态,在用户调用start()方法之前都是出生状态,当用户调用了start()方法后,线程处于就绪状态(可执行状态),当线程得到系统的资源后就会进入运行状态。一旦线程进入可执行的状态以后,就会在就绪状态和运行状态下转换,同时也有可能进去阻塞,等待,休眠或者死亡状态。 处于运行状态的线程调用wait()方法的时候,该线程就进入等待状态,进入等待状态的线程必须调用线程类中的notify()方法才能被唤醒。notifyAll()方法是将所有处于等待状态的线程唤醒。调用Thread类中的sleep()方法的时候,就会进去休眠状态,当一个线程的run()方法执行完毕后,线程就会进入死亡状态。所以在开发的过程中我们经常在run()方法中设置循环来进行耗时操作,无论是PC端界面或者是Android界面都是这样。一般我们用循环的条件的方法来控制线程是否结束。
(3)线程阻塞,同步,交互(通信)
线程的加入,假如存在一个线程A,现在需要插入线程B,并要求线程B先执行完后再继续执行线程A,此时可以调用Thread类中的join方法来完成。
线程都具有各自的优先级,优先级可以表明线程在程序中的重要性,如果有很多线程处于就绪状态,系统就会根据线程的优先级来决定哪个线程先执行。但是并不是意味着优先级底的线程得不到运行,例如,垃圾回收线程它的优先级就非常低。
线程安全线程同步的问题,线程安全的问题来源于,两个线程同时存取单一的对象数据。一般使用synchoronized关键字。可以对对象数据进行加同步锁,也可以对方法进行加同步锁。这样就解决了线程安全的问题。
(4)单线程程序。顾名思义就是只有一个线程运行的程序
(5)多线程程序。就是拥有两个及以上线程的程序,常见需要用到多线程的程序有 1,GUI程序 2,耗时操作程序,例如I/O操作,网络连接,数据库连接及操作,串口接收数据等操作。3,多客户端程序,服务端程序需要处理多个客户端的请求的时候这个时候需要用到。
(6)线程的共享和互斥。当多线程在竞争同一资源的时候,该资源没有加锁就会引发程序数据错误,这个时候就该给这个资源加上锁,具体的需要用到synchronized关键字对资源或者方法进行上锁。被上锁的资源,同时只有一个线程可以操作该资源。
java线程,进程,多线程的更多相关文章
- Java线程和多线程(一)——线程的基本概念
Java 线程是一个轻量级执行任务的处理单元.Java提供了Thread类来支持多线程,开发者在应用中可以创建多个线程来支持并发执行任务. 在应用中存在两种类型的线程,用户线程和守护线程.当我们启动应 ...
- Java线程与多线程教程
本文由 ImportNew - liken 翻译自 Journaldev. Java线程是执行某些任务的轻量级进程.Java通过Thread类提供多线程支持,应用可以创建并发执行的多个线程. 应用 ...
- Java 线程与多线程
Java是一门支持多线程的编程语言! 什么是进程? 计算机中内存.处理器.IO等资源操作都要为进程进行服务. 一个进程上可以创建多个线程,线程比进程更快的处理单元,而且所占用的资源也小,多线程的应用也 ...
- Java线程和多线程(十三)——Callable,Future,FutureTask
在Java多线程之中,Callable和Future的使用时非常广泛的.在之前的文章中,我们了解了关于Java线程池基础的一些内容,知道如何提交Runnable的任务.但是,Runnable的任务是无 ...
- Java线程和多线程(十二)——线程池基础
Java 线程池管理多个工作线程,其中包含了一个队列,包含着所有等待被执行的任务.开发者可以通过使用ThreadPoolExecutor来在Java中创建线程池. 线程池是Java中多线程的一个重要概 ...
- Java线程和多线程(八)——Thread Dump
Java的Thread Dump就是列出JVM中所有激活状态的线程. Java Thread Dump Java Thread Dump在分析应用性能瓶颈和死锁的时候,是非常有效的. 下面将介绍多种不 ...
- Java线程和多线程(三)——线程安全和同步
线程安全在Java中是一个很重要的课题.Java提供的多线程环境支持使用Java线程.我们都知道多线程共享一些对象实例的话,可能会在读取和更新共享数据的事后产生数据不一致问题. 线程安全 之所以会产生 ...
- Java 线程和多线程执行过程分析
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- java线程跟多线程
java创建线程两种方式: 1.继承Thread创建线程 /** * Created by lsf on 16/4/18. */ class NewThread extends Thread { Ne ...
- Java线程和多线程(十五)——线程的活性
当开发者在应用中使用了并发来提升性能的同时,开发者也需要注意线程之间有可能会相互阻塞.当整个应用执行的速度比预期要慢的时候,也就是应用没有按照预期的执行时间执行完毕.在本章中,我们来需要仔细分析可能会 ...
随机推荐
- moviepy音视频剪辑:输出文件前预览剪辑和视频帧的preview和imdisplay方法
☞ ░ 前往老猿Python博文目录 ░ 一.引言 由于moviepy合成剪辑后,输出需要较多的时间,那么在输出前预览一下有助于提高处理效率.moviepy提供了预览的工具,这个工具是基于pygame ...
- moviepy音视频剪辑:视频基类VideoClip子类VideoFileClip、CompositeVideoClip、ImageSequenceClip介绍
☞ ░ 前往老猿Python博文目录 ░ 一.引言 在<moviepy音视频剪辑:moviepy中的剪辑相关类及关系>介绍了VideoClip主要有六个直接子类(VideoFileClip ...
- PyQt(Python+Qt)学习随笔:QTableWidget项编辑方法editItem、openPersistentEditor
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 1.触发编辑项的editItem方法 QTableWidget提供了触发项编辑的方法,调用语法如下: ...
- VirtualBox安装Centos出现E_FAIL (0x80004005)的解决方法
问题描述:UUID已经存在 Cannot register the hard disk 'F:\hadoop\VirtualBox-centos\centos6.4\centos6.4.vdi' {0 ...
- 百度前端技术学院-基础-day7.8
任务:参考如下设计稿实现HTML页面及CSS样式 代码 点击预览 HTML 1 <!DOCTYPE html> 2 <html lang="en"> 3 & ...
- angular 双向数据绑定与vue数据的双向数据绑定
二者都是 MVVM 模式开发的典型代表 angular 是通过脏检测实现,angular 会将 UI 事件,请求事件,settimeout 这类延迟的对象放入到事件监测的脏队列,当数据变化的时候,触发 ...
- 题解-CF617E XOR and Favorite Number
题面 CF617E XOR and Favorite Number 给定 \(n,m,k\) 和 \(n\) 个数的序列 \(a_i\),\(m\) 次求区间 \([l,r]\) 中异或值为 \(k\ ...
- 题解-Roman and Numbers
题解-Roman and Numbers 前置知识: 数位 \(\texttt{dp}\) </> \(\color{#9933cc}{\texttt{Roman and Numbers} ...
- 用Ubuntu和树莓派系统部署kubernetes集群后的一些心得
方案 环境 操作系统:Ubuntu 16.04 & Raspbian GNU/Linux 9(Stretch Desktop) kubernetes :1.15.3 flannel:0.11. ...
- Nginx安装配置教程
转自https://www.cnblogs.com/zhouxinfei/p/7862285.html nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是 ...