线程

进程:有独立的内存空间和系统资源,应用实例

多线程:在一个进程当中同时进行了多个线程,用来完成不同的工作。

线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。每一个程序
    都至少有一个线程,那就是程序本身。
    线程是程序中一个单一的顺序控制流程。在单个程序中同时运行多个线程完成不同的工作,称为多线程。

多个线程交替占用cpu资源,而非真正的并行执行。

多线程好处:

充分利用cpu资源

简化编程模型

带来良好的用户体验

Thread类:java提供了java.lang.Thread类支持多线程编程

 

主线程:

Main()方法即为主线程

创建子线程

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

Thread    t=Thread.currentThread();主线程执行(主线程名字可更改)

创建子线程的两种方式:

继承Thread类(编写简单,   适用于单继承)

实现Runnable接口(避免单继承局限性,   便于共享资源)

 

多个线程交替执行,并不是真正的“并行”;(并不是在同一时间运行的,而确实在同一进行下执行的)

线程每次执行时长由分配的CPU时间片长度决定

线程状态

创建状态:Thread ad=new Thread(mytable);

就绪状态

运行状态:syso

阻塞状态 Thread.sleep(4000);

死亡状态

启动线程:线程对象.Start()方法

 

能否调用run()方法的方式调用线程?

如果调用run()方法,只执行主线程,实现单线程

调用start()方法多条执行路径,主线程和子线程并行交互执行

 

线程优先级优先获得cpu分配的资源变大了

线程优先级由1~10表示,1最低,默认优先级为5

优先级高的线程获得CPU资源的概率较大

 

线程调度:指按照特定机制为多个线程分配CPU的使用权

强制插入的线程名称.Join();

public final void join()

public final void join(long mills)

public final void join(long mills,int nanos)

millis:以毫秒为单位的等待时长

nanos:要等待的附加纳秒时长

需处理InterruptedException异常

 

setPriority(int  newPriorit)

更改线程的优先级

static void sleep(long millis)

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

Join

等待该线程终止(被强制执行)

Static  yied

暂停当前正在执行的线程对象,并执行其他线程(主动礼让)

Void interrupt

中断线程

boolean isAlive()

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

为什么进行线程同步:在线程安全的情况下进行资源共享

线程同步方式:同步synchronized方法  

同步代码块(synchronized就是为当前的线程声明一个锁

线程安全的类型:Stringbuffer  vectotre    hashmap

非线程安全的类型:Stringbuilder  hashtable  Arraylist

对比:

Hashtable  &&  HashMap

Hashtable

继承关系

实现了Map接口,Hashtable继承Dictionary类

线程安全,效率较低

键和值都不允许为null

HashMap

继承关系

实现了Map接口,继承AbstractMap类

非线程安全,效率较高

键和值都允许为null

StringBuffer  &&  StringBuilder

前者线程安全,后者非线程安全

 

有关synchronized:

 

多个并发线程访问同一资源的同步代码块时

同一时刻只能有一个线程进入synchronized(this)同步代码块

当一个线程访问一个synchronized(this)同步代码块时,其他synchronized(this)同步代码块同样被锁定

当一个线程访问一个synchronized(this)同步代码块时,其他线程可以访问该资源的非synchronized(this)同步代码

你可能感兴趣的:(线程)