Java多线程基础
多线程基础
冰冷冻咖啡
这个作者很懒,什么都没留下…
展开
-
Java线程池的用法、线程池的工厂类Executors,接口类ExecutorService
Java里面线程池的顶级接口是java.util.concurrent.Executor,但是严格意义上讲Executor并不是一个线程池,而只是一个执行线程的工具。真正的线程池接口是java.util.concurrent.ExecutorService。要配置一个线程池是比较复杂的,尤其是对于线程池的原理不是很清楚的情况下,很有可能配置的线程池不是较优的,因此在java.util.concurrent.Executors线程工厂类里面提供了一些静态工厂,生成一些常用的线程池。官方建议使用Executo原创 2020-05-10 21:53:49 · 606 阅读 · 0 评论 -
Java多线程中的生产者与消费者问题:等待唤醒机制的应用:wait()和notify()
等待唤醒机制其实就是经典的“生产者与消费者”的问题。就拿生产包子消费包子来说等待唤醒机制如何有效利用资源:包子铺线程生产包子,吃货线程消费包子。当包子没有时(包子状态为false),吃货线程等待,包子铺线程生产包子(即包子状态为true),并通知吃货线程(解除吃货的等待状态),因为已经有包子了,那么包子铺线程进入等待状态。接下来,吃货线程能否进一步执行则取决于锁的获取情况。如果吃货获取到锁,那...原创 2020-05-04 22:13:20 · 258 阅读 · 0 评论 -
Java多线程之线程间通信和等待唤醒机制,调用wait和notify方法
等待唤醒机制1.1 线程间通信**概念:**多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同。比如:线程A用来生成包子的,线程B用来吃包子的,包子可以理解为同一资源,线程A与线程B处理的动作,一个是生产,一个是消费,那么线程A与线程B之间就存在线程通信问题。为什么要处理线程间通信:多个线程并发执行时, 在默认情况下CPU是随机切换线程的,当我们需要多个线程来共同完成一件任务...原创 2020-05-04 21:01:48 · 367 阅读 · 1 评论 -
Java中多线程中的线程状态概述: Timed Waiting(计时等待); BLOCKED(阻塞锁); Waiting(无限等待)
JVM虚拟机中线程的状态转换图new完线程后,各个线程开始抢cpu,抢到的进入运行状态,没有抢到的进入阻塞状态,阻塞状态和运行状态可以相互转换(多个线程一起抢夺cpu的使用权)。run出现异常或者结束的话会进入死亡状态。运行状态可以进入睡眠状态,睡眠结束若cpu空闲,进入运行状态,若不空闲,进入阻塞状态。休眠是可以自己醒的,无限等待状态是不能自己醒的,需要借助Object类中的方法...原创 2020-05-04 19:52:32 · 3394 阅读 · 0 评论 -
Java中的线程安全出现的原因和解决办法(多个线程共享资源,临界区)
线程安全出现的原因这里我们让多个线程共享同一个卖票资源:public class RunnableImpl implements Runnable { //总的票得数量 int tickets = 20; @Override public void run() { while (true) { if (tickets ...原创 2020-05-03 20:45:25 · 440 阅读 · 0 评论 -
Java线程同步:synchronized锁住的是代码还是对象
在Java中,synchronized关键字是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行。synchronized既可以加在一段代码上,也可以加在方法上。关键是,不要认为给方法或者代码段加上synchronized就万事大吉,看下面一段代码:class Sync { public synchronized void test() {...转载 2020-05-03 20:43:59 · 256 阅读 · 0 评论 -
Java使用匿名内部类创建多线程:实现Thread类和Runnable接口
匿名:没有名字内部类:写在其他类内部的类匿名内部类作用:简化代码 把子类继承父类,重写父类的方法,创建子类对象合一步完成 把实现类实现类接口,重写接口中的方法,创建实现类对象合成一步完成 匿名内部类的最终产物:子类/实现类对象,而这个类没有名字 格式: new 父类/接口(){ 重复父类/接口中的方法 };public class An...原创 2020-05-01 14:36:11 · 1180 阅读 · 0 评论 -
Java多线程之:创建多线程程序的第二种方式:实现Runnable接口
java.lang.RunnableRunnable 接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个称为 run 的无参数方法。java.lang.Thread类的构造方法Thread(Runnable target) 分配新的 Thread 对象。Thread(Runnable target, String name) 分配新的 Thread 对象。实现步骤...原创 2020-05-01 14:20:53 · 262 阅读 · 0 评论 -
Thread.sleep()线程睡眠的方法使用
public class ThreadSleep { public static void main(String[] args) { for (int i = 0; i < 60; i++) { System.out.println(i); try { Thread.sleep(1000...原创 2020-05-01 13:37:03 · 1994 阅读 · 0 评论 -
Java多线程之:获取当前线程名getName()和Thread类的静态方法类currentThread()
使用Thread类中的方法getName()String getName()返回该线程的名称。可以先获取到当前正在执行的线程,使用线程中的方法getName()获取线程的名称static Thread currentThread() 返回对当前正在执行的线程对象的引用。public class MyThread extends Thread { @Override pu...原创 2020-05-01 01:19:31 · 833 阅读 · 0 评论 -
Java多线程之:创建多线程程序的第一种方式:创建Thread类的子类
java.lang.Thread类:是描述线程的类,我们想要实现多线程程序,就必须继承Thread类实现步骤:1. 创建一个Thread类的子类2. 在Thread类的子类中重写Thread类中的run方法,设置线程任务(开启线程要做什么?)3. 创建Thread类的子类对象4. 调用Thread类中的方法start方法,开启新的线程,执行run方法 void start(...原创 2020-05-01 00:31:53 · 476 阅读 · 0 评论