进程每个独立运行的任务对应一个进程,每个进程可以产生多个线程

特点:1,进程是系统运行程序的基本单位

2,每一个进程都有自己独立的一块内存空间,一组系统资源

3,每一个进程的内部数据和状态都是完全独立的

系统中可以有多个进程,包括系统进程和用户进程

线程:线程是进程中执行运算的最小单位,可完成一个独立的顺序控制流程。每个进程中至少有一个线程,被称为主线程,来作为程序运行的入口点。

一个进程中有多个线程,用来完成不同的工作称为“多线程”。每个任务是一个线程,多个线程共享相同的地址空间并且共同分享同一个进程。

好处:充分利用CPU资源;简化编程模型;带来良好的用户体验

Thread

Java通过Thread类讲线程所必须的功能都封装了起来。

java.lang.Thread类支持多线程编程

Thread类常用方法

构造方法

说明

Thread()

分配新的Thread对象

Thread(Runnable target)

分配新的Thread对象,target为run()方法被调用的对象

Thread(Runnable target,String name)

分配新的Thread对象,target为run()方法被调用的对象,name为新线程的名称

void run()

执行任务操作的方法

void start()

使该线程开始执行,Java虚拟机调用该线程的run()方法

void sleep(long millis)

在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)

String getName()

返回线程的名称

int getPriority()

返回线程的优先级

void setPriority(int newPriority)

更改线程的优先级

static Thread currentThread()

返回当前正在执行的线程对象的引用

boolean isAlive()

测试线程是否处于活动状态

void join()

等待该线程终止,等待该线程完成后才执行其他线程

void interrupt()

中断线程

void yield()

暂停当前正在执行的线程对象,并执行其他线程

MAX PRIORITY线程具有最高优先级

MIX PRIORITY线程具有最低优先级

NORM PRIORITY分配给线程的默认优先级

主线程

main()方法即为主线程入口

产生其他线程的线程

必须最后完成执行,因为它执行各种关闭动作

使用线程步骤:1,定义一个线程,同时指明这个线程所要执行的代码

2,创建线程对象

3,启动线程

4,终止线程

创建线程的两种方法:继承Thread类或实现Runnable接口

继承Thread类创建线程

创建线程:定义MyThread类继承并重写Thread类的run()方法,编写线程执行体,创建线程对象,调用start()方法启动线程,run()方法调用实例

自定义线程默认名称为:Thread-序号(为从0开始的整数)

start():线程的

run():普通方法,称为线程体

CPU分配时间片的时候,run()开始执行

线程的五种状态:创建、就绪run()、阻塞(sleep()、yield()、wait()、join())、运行、死亡(异常死亡、正常死亡)

sleep:线程调用此方法的时候,占用cpu资源不释放,其他线程无法获取cpu资源,必须等待

wait(Object中的方法):线程调用的时候会释放cpu资源,其他线程无需等待,如果调用此方法,就必须使用notify()唤醒。

yield礼让:是概率问题

简答一:单CPU的机器如何同时执行一个线程

单CPU机器同时只能执行一条指令,不可能同时执行多个任务。只是将时间分成多个时间片,分配给不同的路线。只是表面上看上去是多个线程同步执行,其实是因为不同线程之间的时间非常短。看起来是多个线程同时执行。

简答二:关于start()与run()

线程实例调用start()方法和调用run()方法有着天壤之别,run是调用实例方法,只有主线程执行,只有一条执行路径,start才是真正的启动线程。

简答三:线程常见的5种状态:1,创建:创建线程对象后已经取得了相应的资源,却没有处于运行状态,可以通过Thread类的方法来设置线程对象的状态。

2,就绪:通过start()方法启动线程,就会进入就绪状态。进入线程队列排队,等待CPU资源。

3,运行:就绪状态的线程获得CPU资源时,即可转入运行状态,执行run()方法。

4,阻塞:正在运行的程序因某种原因不能继承运行时,进入阻塞状态。是一种不可运行的状态。可能出现的原因:线程优先级比较低,因此不能获得CPU资源;使用sleep()方法使线程休眠;通过调用wait()方法使线程等待;通过调用yield()方法,线程显示出让CPU控制权;

线程由于等待一个文件I/O事件被阻塞

5,死亡:线程的run()方法运行完毕,就会进入死亡状态。不具有继承运行的能力。

JAVAOOP多线程的更多相关文章

  1. Python中的多进程与多线程(一)

    一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...

  2. 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例

    前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...

  3. 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)

    前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...

  4. Java多线程

    一:进程与线程 概述:几乎任何的操作系统都支持运行多个任务,通常一个任务就是一个程序,而一个程序就是一个进程.当一个进程运行时,内部可能包括多个顺序执行流,每个顺序执行流就是一个线程.   进程:进程 ...

  5. .NET基础拾遗(5)多线程开发基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...

  6. Java多线程基础——对象及变量并发访问

    在开发多线程程序时,如果每个多线程处理的事情都不一样,每个线程都互不相关,这样开发的过程就非常轻松.但是很多时候,多线程程序是需要同时访问同一个对象,或者变量的.这样,一个对象同时被多个线程访问,会出 ...

  7. C#多线程之线程池篇3

    在上一篇C#多线程之线程池篇2中,我们主要学习了线程池和并行度以及如何实现取消选项的相关知识.在这一篇中,我们主要学习如何使用等待句柄和超时.使用计时器和使用BackgroundWorker组件的相关 ...

  8. C#多线程之线程池篇2

    在上一篇C#多线程之线程池篇1中,我们主要学习了如何在线程池中调用委托以及如何在线程池中执行异步操作,在这篇中,我们将学习线程池和并行度.实现取消选项的相关知识. 三.线程池和并行度 在这一小节中,我 ...

  9. C#多线程之线程池篇1

    在C#多线程之线程池篇中,我们将学习多线程访问共享资源的一些通用的技术,我们将学习到以下知识点: 在线程池中调用委托 在线程池中执行异步操作 线程池和并行度 实现取消选项 使用等待句柄和超时 使用计时 ...

随机推荐

  1. 通知:即日起本博客暂停更新,请移步至yanxin8.com获取最新文章

    通知:即日起本博客暂停更新,请移步至yanxin8.com与博主交流及获取最新文章

  2. Java入门到精通——框架篇之Spring源码分析Spring两大核心类

    一.Spring核心类概述. Spring里面有两个最核心的类这是Spring实现最重要的部分. 1.DefaultListableBeanFactory 这个类位于Beans项目下的org.spri ...

  3. .NET开源工作流RoadFlow-表单设计-标签(label)

    LABEL标签即在表单中添加一个文本标签: 字号:标签显示文字的大小. 颜色:标签显示文字的颜色. 样式:以粗体和斜体显示.

  4. C#多线程和异步(二)——Task和async/await详解(转载)

    一.什么是异步 同步和异步主要用于修饰方法.当一个方法被调用时,调用者需要等待该方法执行完毕并返回才能继续执行,我们称这个方法是同步方法:当一个方法被调用时立即返回,并获取一个线程执行该方法内部的业务 ...

  5. wxpython wx.windows的API

    wx.Window is the base class for all windows and represents any visible object on screen. All control ...

  6. 什么是PDM?

    PDM的含义 PDM的中文名称为产品数据管理(Product Data Management). PDM是一门用来管理所有与产品相关信息(包括零件信息.配置.文档.CAD文件.结构.权限信息等)和所有 ...

  7. 服务器bios&raid管理

    新服务器配置流程 https://github.com/alces-software/knowledgebase/wiki/server-dell-rseries-r630 dell DTK(sysc ...

  8. 1.windows下GIT 服务安装

    本章介绍简单在windows 安装git 服务方法.服务器端采用的是Bonobo Git Server,一款用ASP.NET MVC开发的Git源代码管理工具,界面简洁,基于Web方式配置,简单易用. ...

  9. pl/sql中的一种链接数据库方式

    今天看开发人员如此连接数据库:

  10. Sql Server中一次更新多列数据

    UPATE yourTableName SET column1 = xx, column2 = yy , column3 = zz WHERE yourCondition 举个例子,比如有这样一张表: ...