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

特点: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. Java入门到精通——调错篇之Eclipse Java compiler level dose not match the version of the installed Java project

    一.错误现象. java项目显示红色,并且类中引用包中会报红色错误,在Eclipse下面显示下面错误提示如图: 二.错误原因. 通过字面意思一看就很明白java的版本不对. 三.解决办法. 3.1右键 ...

  2. C# Process.WaitForExit()与死锁

    前段时间遇到一个问题,搞得焦头烂额,现在记录下来,希望对大家有所帮助. 程序里我使用Process类启动命令行,执行批处理文件 'Create.cmd'(当我手工将此文件拖入命令行执行时,一切正常). ...

  3. pb getchild获取DropDownDW子窗体后进行取值

    datawindowchild ldwc if dw_1.getchild("dwmc", ldwc) = 1 then  long ll_f  ll_f = ldwc.find( ...

  4. tdf sample

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net ...

  5. 关于main函数的参数,argc,argv的内部机制

    偶尔对main函数的参数感兴趣,写了个程序验证. int main(int argc,char **argv) 首先,解释两点: 第一 .系统将参数列表,即我们在shell下输入的命令,存储到一个一维 ...

  6. Using nxlog4go for Testing Environment

    nxlog4go is very simple to use without any configuring, setting. For example: package main import ( ...

  7. mysqlimport导入简单测试

    1    创建一个文本文档:[mysql@xxxycrdb]$ more /tmp/ldcmd1.txt 1,abc,abc@qq.com1,abc,abc@qq.com1,abc,abc@qq.co ...

  8. URL地址解析

    URL的一般格式为(带方括号[]的为可选项): protocol :// hostname[:port] / path /[?query]#fragment   1.protocol :// 为传输协 ...

  9. 代码混淆和dump

    首先是安装和使用dump: 下载dump地址 1.选择class-dump-3.5.dmg 下载: 2.下载之后,点击打开,复制class-dump文件, 3.shift+command+G 打开fi ...

  10. WebService 之CXF(rs)之HelloWorld

    1.建立mavenjava项目 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http ...