
java多线程
niceYF
这个作者很懒,什么都没留下…
展开
-
线程通信--生产者消费者问题
解决方法1–管程法生产者将生产好的数据放入缓冲区,消费者从缓冲区拿出数据原创 2022-03-28 15:40:52 · 448 阅读 · 0 评论 -
多线程--Lock锁
从JDK5.0开始,java提供了更强大的线程同步机制–通过显示定义同步锁对象来实现同步。同步锁使用lock对象充当Lock接口是控制多线程对共享资源进行访问的工具。锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问共享资源之前应先获得Lock对象。ReentrantLock类实现了Lock,它拥有与synchronized相同的并发性和内存语义,在实现线程安全的控制中,比较常用的是ReentrantLock,可以显示的加锁、释放锁。package com.yf.sy.原创 2022-03-28 13:55:59 · 338 阅读 · 0 评论 -
多线程--死锁问题
死锁:多个线程互相抱着对方需要的资源,然后形成僵持。对于自己已有的资源不愿意放手。package com.yf.syn;public class DeadLock { public static void main(String[] args) throws InterruptedException { MakeUp g1 = new MakeUp(0,"yf1"); MakeUp g2 = new MakeUp(1,"yf2"); g1.st原创 2022-03-28 12:48:13 · 319 阅读 · 0 评论 -
线程同步(synchronized)机制
处理多线程问题时,多个线程访问同一个对象,并且某些线程还想修改这个对象。这时候我们就需要线程同步。线程同步其实就是一种等待机制,多个需要同时访问此对象的线程进入这个对象的等待池形成队列,等待前面线程使用完毕,下一个线程再使用。线程同步形成条件:队列+锁由于同一个进程的多个线程共享同一块存储空间,在带来方便的同时,也带来了访问冲突问题。为了保证数据在方法中被访问的正确性,在访问时加入锁机制,当一个线程获得对象的排它锁,独占资源,其他线程必须等待,使用后释放锁即可:存在以下问题一个线程持有锁会导致其他所原创 2022-03-27 23:58:11 · 667 阅读 · 0 评论 -
线程优先级和守护线程
线程优先级线程优先级代表着线程抢占CPU的概率,优先级越高越有可能抢占到CPU。不一定优先级越高的线程就先执行,只是代表概率。线程优先级在1~10之间。package com.yf.demo04;public class TestPriority { public static void main(String[] args) { System.out.println(Thread.currentThread().getName()+"--->"+Thread.cur原创 2022-03-27 21:25:53 · 1185 阅读 · 0 评论 -
线程礼让和强制执行
线程礼让yiled线程礼让就是让线程停止执行,重新回到就绪状态再竞争cpu的使用权。线程礼让也可能会失败回到就绪状态重新竞争,可能在再次竞争的时候依然得到cpu使用权。package com.yf.demo04;public class TestYield { public static void main(String[] args) { MyYiled myYiled = new MyYiled(); new Thread(myYiled,"小红").原创 2022-03-27 20:30:46 · 361 阅读 · 0 评论 -
五种线程状态
线程创建Thread t = new Thread();线程对象一旦创建就进入到了新生状态就绪状态当调用start()方法,线程立即进入就绪状态,但不意味着立即调度执行运行状态进入运行状态,线程才真正执行线程体的代码块阻塞状态当调用sleep,wait或同步锁定时,线程进入阻塞状态,就是代码不往下执行,阻塞事件解除后,重新进入就绪状态,等待cpu调度。sleep(时间)指定当前线程阻塞的毫秒数sleep存在异常InterruptedException;sleep时间到达后线程进入就绪原创 2022-03-27 18:29:26 · 481 阅读 · 0 评论 -
多线程--静态代理
静态代理模式总结真实对象和代理对象都要实现同一个接口代理对象要代理真实角色优点真实角色只需要关注自己的事情,核心业务,琐碎的事情交由代理对象去做代理对象可以实现很多真实对象做不了的事情public class StaticProxy { public static void main(String[] args) { //lambda表达式 Runnable runnable = ()-> System.out.println("我爱你");原创 2022-03-27 17:08:03 · 323 阅读 · 0 评论 -
线程创建--实现Callable接口
步骤实现Callable接口,需要返回值类型重写call方法,需要抛出异常创建目标对象创建执行服务ExecutorService executorService = Executors.newFixedThreadPool(3);这是一个线程池,3,代表这个线程池里面可以有三个线程提交执行Future t1 = executorService.submit(testThread01);获取结果Boolean Boolean1 = t1.get();关闭服务executorServi原创 2022-03-27 15:47:08 · 277 阅读 · 0 评论 -
线程创建--实现Runnable接口
步骤写一个类实现runnable接口重写run()方法创建线程对象,通过线程对象来开启线程//创建线程方式2:实现Runnable接口,重写run方法,执行线程需要丢入runnalbe接口实现类.调用startpublic class TestThread2 implements Runnable{ @Override public void run() { for (int i = 0; i < 20; i++) { Syste原创 2022-03-27 14:53:58 · 571 阅读 · 0 评论 -
java--线程
Proceed与Thread进程是执行程序的一次执行过程,它是一个动态的概念。是资源分配的单位。通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程是cpu调度和执行的基本单位。注意:现在很多线程都是模拟出来的,真正的线程是指有多个CPU,即多核,如服务器。如果模拟出来的多线程,即在一个cpu的情况下,在同一个时间点,cpu只能执行一个代码,因为切换的很快,所以就有同时执行的错觉。核心概念线程就是独立的执行路径;在程序运行时,即使没有自己创建线程,后台原创 2022-03-27 01:32:00 · 461 阅读 · 0 评论