![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
陌路逐风
这个作者很懒,什么都没留下…
展开
-
线程池
系统启动一个新线程的成本是非常高的。因为它涉及与操作系统的交互,使用线程池可以很好的提高性能。尤其是当系统中需要创建大量短暂存在的线程时。 线程池在系统启动时即创建大量空闲的线程,程序将一个Runnable对象或者Callable对象传给线程池,线程池就会启动一个空闲的线程来执行它们的run()方法或者call()方法,当run()方法或者call()方法执行完后,该线程并不会死亡,而是再次返回线...原创 2019-11-28 22:13:11 · 55 阅读 · 0 评论 -
线程的通信问题
在现实中,我们有时需要线程之间的协作来处理问题,比如最经典的生产者消费者模式,生产者必须等到队列中有空间时才能继续往里面放货物,那么在等待的时间里,就需要释放对临界资源的占(队列),因为生产者不释放对队列的占用权,消费者就无法进行消费,那么生产者就会一直进行等待。对于消费者同样如此,这种互相通信的方式就是线程间的通信。 实现线程通信的常用方式 实现线程间的通信最常见的以下两种方式 i>syn...原创 2019-11-26 17:28:47 · 128 阅读 · 0 评论 -
线程同步
java中实现线程同步的三种方式 i>同步代码块 ii>同步方法 iii>使用同步互斥锁Reetrantlock原创 2019-11-22 22:56:12 · 97 阅读 · 0 评论 -
线程的优先级和守护线程
线程的优先级 Thread类提供了setPriority(int newPriority),getPriority()来设置和返回指定线程的优先级,设置优先级的范围是1-10之间的整数,也可以是Thread类下的三个静态常量 MAX_PRIORITY 值是10 MIN_PRIORITY 值是1 NORM_PRIORITY 值是5 高优先级的线程会获得更多的执行机会 守护线程 守护线程也叫后台线程、...原创 2019-11-21 16:45:17 · 94 阅读 · 0 评论 -
线程的控制--sleep
线程睡眠 如果需要让当前执行的线程暂停一段时间,并进入阻塞状态可以调用Thread类的静态方法sleep()实现 当当前线程调用sleep方法后,该线程会进入阻塞状态,在该线程睡眠的时间里,该线程不会有执行的机会,即使执行的程序中没有其他线程。 @Override public void run() { System.out.println("睡眠前时间"+new Dat...原创 2019-11-21 16:23:32 · 637 阅读 · 0 评论 -
线程的控制--join
join join方法是确定线程何时结束的,该方法将实现等待,一直到调用它的线程执行完 join容器不会死,一直到容器中的线程死光,join死主线程也会死,是一种连锁效应 例子1 public static void main(String[] args) { System.out.println("主线程开始"); ThreadA ta=new ThreadA(...原创 2019-11-21 15:45:21 · 80 阅读 · 0 评论 -
线程的状态
线程的状态有新建,就绪,运行,阻塞,死亡 具体的过程如下: 新建:当一个线程对象被new出来时就完成了新建线程 就绪:当新建出的线程对象调用了start()后线程进入就绪状态 运行:新建的线程对象调用了run()方法后线程进入运行状态 阻塞:i>调用了sleep(),让线程进入睡眠状态 ii>发生了IO阻塞 iii>等待同步锁解锁 iv>wait()等待通知 v>调用...原创 2019-11-20 18:05:06 · 67 阅读 · 0 评论 -
java多线程的基本概念
线程和进程的区别 i>进程是程序运行和资源分配的基本单位,线程是进程的一个实体,是CPU调度和分配的基本单位,是比程序更小的能独立运行的基本单位。 ii>进程在执行的过程中拥有独立的内存单元,而多个线程共享内存资源,减少切换次数,从而效率更高。 并发和并行的区别 并行:指的是在同一时刻,有多个处理器同时处理多条指令 并发:指的是在同一时刻只能处理一条指令,指令交替进行处理,在宏观上具有...原创 2019-11-20 17:08:07 · 70 阅读 · 0 评论 -
java多线程的创建方式
线程的创建方式 通过继承Thread类来创建线程 //分别创建两个类分别继承Thread创建线程 public class ThreadA extends Thread { @Override public void run() { for(int i=0;i<3;i++){ //打出当前线程的名字 System.out.prin...原创 2019-11-20 16:42:11 · 87 阅读 · 0 评论