Java——多线程基础知识

本文主要介绍Java多线程相关知识,包括进程和线程的区别,线程的休眠、中断、状态获取等操作。还阐述了线程的6种状态和守护线程的特点。此外,详细讲解了锁和条件对象,如ReentrantLock、Condition的使用,以及synchronized关键字和Object类的相关方法。

多线程
进程和线程的区别:每一个进程拥有自己的一整套变量,而线程则共享数据。
java.lang.Thread
    static void sleep(long millis) 线程休眠给定的毫秒数,用于暂停当前线程的活动。
    void interrupt() 向线程发送中断请求。线程中断状态将被设置为true。若当前该线程被一个sleep调用阻塞,将会抛出InterruptedException异常。
    static boolean interrupted() 判断当前线程是否被中断。调用该方法会将当前线程的中断状态重置为false。
    boolean isInterrupted() 判断当前线程是否被中断。不改变线程状态。
    static Thread currentThread() 返回当前线程的Thread对象。
    void join() 等待终止线程。
    void join(long millis) 等待millis毫秒数后终止线程。
    Thread.State getState() 得到线程状态(线程6态)
    void setPriority(int newPriority) 设置线程优先级。必须在1到10之间。
    static int MIN_PRIORITY 最小优先级1
    static int NORM_PRIORITY 优先级5
    static int MAX_PRIORITY 最高优先级10
    static void yield() 使当前执行线程处于让步状态。其余优先级大于等于该线程优先级的线程将会被调度。
    void setDaemon(boolean isDaemon) 标识该线程为守护线程,这一方法必须用在线程启动之前。


线程6态:New(新生)、Runnable(可运行)、Blocked(被阻塞)、Waiting(等待)、Timed waiting(计时等待)、Terminated(被终止)   


守护线程:守护线程的唯一用途就是为其它线程提供服务。当只剩下守护线程时,虚拟机就退出了。守护线程应该永远不去访问固有资源。


锁:
java.util.concurrent.locks.Lock
    void lock() 获取这个锁;若锁同时被另一个线程拥有则发生阻塞。
    void unlock() 释放这个锁。
java.util.concurrent.locks.ReentrantLock
    ReentrantLock() 构建一个可以被用来保护临界区的可重入锁。
    ReentrantLock(boolean fair) 构建一个带有公平策略的锁。公平锁偏爱等待时间最长的线程,这一公平的保证大大降低了性能,因此默认锁不是公平锁。


条件对象:线程进入临界区,却发现需满足某一条件才能执行。使用条件对象来管理那些已经获得了一个锁,但是却不能做有用工作的线程。
java.util.concurrent.locks.Lock
    Condition newCondition() 返回一个与该锁相关的条件对象。
java.util.concurrent.locks.Condition
    void await() 将该线程放到条件的等待集中。
    void signalAll() 解除该条件的等待集中的所有线程阻塞状态。
    void signal() 从该条件的等待集中随机选择一个线程,解除其阻塞状态。

锁和条件的关键:
    锁用来保护代码片段,任何时候都只能有一个线程执行被保护的代码。
    锁可以管理视图进入被保护代码片段的线程。
    锁可以拥有一个或多个相关的条件对象。
    每个条件对象管理那些已经进入被保护的代码段但还不能运行的线程。

synchronized关键字:从1.0开始,Java中每个对象都有一个内部锁。若一个方法用synchronized关键字声明,那么对象的锁将保护整个方法。要调用该方法,线程必须获得内部的对象锁。

java.lang.Object
    void notifyAll() 解除在该对象上调用wait方法的线程的阻塞状态。
    void notify() 随机选择一个在该对象上调用wait方法的线程,解除其阻塞状态。
    void wait() 导致线程进入等待状态知道它被通知。
    void wait(long millis) millis 毫秒数  nanos 纳秒数
    void wait(long millis,int manos) 导致线程进入等待状态知道它被通知或者经过指定的时间。

转载于:https://www.cnblogs.com/it-mh/p/11161740.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值