时间:2021-05-20
一:什么是JUC
JUC就是java.util.concurrent下面的类包,专门用于多线程的开发。
二:进程和线程的区别
进程是可并发执行的程序在某个数据集合上的一次计算活动,也是操作系统进行资源分配和调度的基本单位。
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与 同属一个进程的其他的线程共享进程所拥有的全部资源。
并发:多线程、 多个线程操作一个资源类,快速交替过程。
并行:多核多CPU;
线程的状态:(java底层源码)
public enum State { NEW, // 新建线程 RUNNABLE, // 线程运行 BLOCKED, // 线程阻塞 WAITING, // 等待 TIMED_WAITING, // 延时等待 TERMINATED; // 线程销毁}三:wait和sleep的区别
1:类层面
wait ------object
sleep-------Thread 谁调用谁睡觉
2:是否释放锁层面
wait --------释放锁
sleep--------不释放锁
3:使用范围层面
wait,notify,notifyall只能在同步方法中或者同步代码块中使用
sleep可以再任意的地方使用
4:异常
sleep必须捕获异常
wait不需要捕获异常
四:线程的几种使用方式
1.优先级
public final void setPriority(int newPriority)
更改线程的优先级。
默认为5,最小为1,最大为10
设置了优先级别之后,级别高 并不是说你一定被优先调度,而是你的被优先调度的概率高而已。
2.线程强制运行:join()
可以通过join()方法使得一个线程强制运行,线程强制运行期间,其他线程无法运行,必须等待此线程完成之后,才可以继续运行。
public final void join() throws InterruptedException
等待该线程终止。
public final void join(long millis)throws InterruptedException
等待该线程终止的时间最长为 millis 毫秒。超时为 0 意味着要一直等下去。
3 线程的休眠(sleep)
在线程中允许一个线程进行暂时的休眠,直接使用Thread.sleep()方法即可。
sleep定义格式:
public static void sleep(long milis,int nanos)
throws InterruptedException
首先,static,说明可以由Thread类名称调用,其次throws表示如果有异常要在调用此方法处处理异常。
所以sleep()方法要有InterruptedException 异常处理,而且sleep()调用方法通常为Thread.sleep(500) ;形式。
控制当前线程休眠若干毫秒
* 1秒= 1000毫秒
* 1秒 = 1000 * 1000 * 1000纳秒 1000000000
4.线程的礼让(yield)
yield()方法实现线程的礼让。
5.判断线程是否在执行:isAlive
6.当前线程:CurrentThread()
程序可以通过currentThread()方法取得当前正在运行的线程对象,
class MyThread implements Runnable{ // 实现Runnable接口 public void run(){ // 覆写run()方法 for(int i=0;i<3;i++){ System.out.println(Thread.currentThread().getName() + "运行,i = " + i) ; // 取得当前线程的名字 } }};public class CurrentThreadDemo{ public static void main(String args[]){ MyThread mt = new MyThread() ; // 实例化Runnable子类对象 new Thread(mt,"线程").start() ; // 启动线程 mt.run() ; // 直接调用run()方法 }};7.线程名称
1,在Thread类中可以通过getName()方法取得线程名称,通过setName()设置线程名称。
2,线程的名称一般在启动线程前设置,但也允许为运行的线程设置名称,允许两个Thread对象有相同名称,但是应该避免。
3,如果程序没有为线程指定名称,系统会自动为线程设置名称。
class MyThread implements Runnable{ // 实现Runnable接口 public void run(){ // 覆写run()方法 for(int i=0;i<3;i++){ System.out.println(Thread.currentThread().getName() + "运行,i = " + i) ; // 取得当前线程的名字 } }};public class ThreadNameDemo{ public static void main(String args[]){ MyThread mt = new MyThread() ; // 实例化Runnable子类对象 new Thread(mt).start() ; // 系统自动设置线程名称 new Thread(mt,"线程-A").start() ; // 手工设置线程名称 new Thread(mt,"线程-B").start() ; // 手工设置线程名称 new Thread(mt).start() ; // 系统自动设置线程名称 new Thread(mt).start() ; // 系统自动设置线程名称 }};五:几种方法的比较
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
一、简介线程池类为java.util.concurrent.ThreadPoolExecutor,常用构造方法为:ThreadPoolExecutor(intc
从Java5开始,Java提供了自己的线程池。线程池就是一个线程的容器,每次只执行额定数量的线程。java.util.concurrent.ThreadPool
在使用多线程的时候有时候我们会使用java.util.concurrent.Executors的线程池,当多个线程异步执行的时候,我们往往不好判断是否线程池中所
一.FutureJDK5引入了Future模式。Future接口是Java多线程Future模式的实现,在java.util.concurrent包中,可以来进
线程池示例在分析线程池之前,先看一个简单的线程池示例。importjava.util.concurrent.Executors;importjava.util.