首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏架构师成长之路

    java(7)-多线程和线程池

    关于线程的基础知识:《Java线程-基础知识》 一. Java实现线程的三种方式 先简单看看java多线程如何实现的: 1.1、继承Thread类 让自己的类继承 Thread 类: public class Test extends Thread { 在web容器使用这种多线程的方式,要记住记得shutdown关闭,否则可能导致线程没有被关闭回收,结果线程数一直增加 当线程数太多时,肯定会导致内存溢出或者影响服务器性能等。 三. boolean)方法,在线程池中的线程数不大于corePoolSize时,keepAliveTime参数也会起作用,直到线程池中的线程数为0; unit:参数keepAliveTime的时间单位,有7种取值 ,在TimeUnit类中有7种静态属性: TimeUnit.DAYS; //天 TimeUnit.HOURS; //小时

    76510编辑于 2022-04-14
  • 来自专栏指点的专栏

    Java 多线程7)----线程池(下)

    前言 在上篇文章:Java 多线程—线程池(上) 中我们看了一下 Java 中的阻塞队列,我们知道阻塞队列是一种可以对线程进行阻塞控制的队列,并且在前面我们也使用了阻塞队列来实现 生产者-消费者模型 有了前面的知识作为基础之后,我们来正式看一下 Java 中的线程池。 线程池的作用 首先来看一下线程池的作用:Java 已经给我们提供了多线程机制,那么线程池是为了解决什么问题呢? 下面来看一下 Java 中的线程池。 个参数的构造方法,这个类提供了多个构造方法,但是终究是调用了这个带有 7 个参数的构造方法,我们来分析一下这个构造方法: 在此之前,我们还得再仔细了解一下 Java 中线程池的原理,相比在文章开头提供的那副图中解释的线程池原理 下一篇文章也应该是本专栏 Java 多线程板块的最后一篇了,在下篇文章中将会介绍线程组的相关知识点和对整个 Java 多线程板块进行一个总结。 如果博客中有什么不正确的地方,还请多多指点。

    74820发布于 2019-01-18
  • 来自专栏测试基础

    Java多线程-7】阅尽Java千般锁

    Java各种同步锁详解 1 锁分类概述 1.1 乐观锁 & 悲观锁 根据对同步资源处理策略不同,锁在宏观上分为乐观锁与悲观锁,这只是概念上的一种称呼,Java中并没有具体的实现类叫做乐观锁或者悲观锁。 悲观锁阻塞事务,乐观锁回滚重试,它们各有优缺点,适应场景的不同区别,比如: 实现方式不同: 乐观锁:在Java中是通过使用无锁编程来实现,最常采用的是CAS算法,Java原子类中的递增操作就通过 悲观锁:依赖Java的synchronized和ReentrantLock等锁去实现。 在不使用锁(没有线程被阻塞)的情况下实现多线程之间的变量同步。java.util.concurrent包中的原子类就是通过CAS来实现了乐观锁。 偏向锁产生自Java 6,并且是jdk默认启动的选项,可以通过-XX:-UseBiasedLocking 来关闭偏向锁。

    59420发布于 2020-09-16
  • 来自专栏Android开发指南

    7多线程

    多线程好处:解决了多部分同时运行的问题。 多线程的弊端:线程太多回到效率的降低。  其实应用程序的执行都是cpu在做着快速的切换完成的。这个切换是随机的。  2,避免了java单继承的局限性。 所以,创建线程的第二种方式较为常用。 在java中,用同步代码块就可以解决这个问题。 同步代码块的格式:  synchronized(对象) {  需要被同步的代码 ; } 同步的好处:解决了线程的安全问题。  |--进程:  |--线程: 2,jvm中的多线程体现。  |--主线程,垃圾回收线程,自定义线程。以及他们运行的代码的位置。 3,什么时候使用多线程多线程的好处是什么? 7,线程间的通信。等待/唤醒机制。  |--概念:多个线程,不同任务,处理同一资源。  |--等待唤醒机制。

    86280发布于 2018-05-14
  • 来自专栏Java后端技术栈

    Java多线程编程-(7)-使用ReentrantReadWriteLock实现Lock并发

    ReentrantLock具有完全互斥排他的效果,即同一时间只能有一个线程在执行ReentrantLock.lock()之后的任务。

    40010发布于 2018-08-09
  • 来自专栏∑小熊猫的博客

    Java 多线程系列(7) —— 线程的延时调度

    实现线程的延时调度需要两个对象,一个是负责对任务进行调度的调度对象 Timer,另一个是继承了 TimerTask 对象的自定义的延时调度对象

    1.6K10发布于 2021-01-20
  • 来自专栏全栈程序员必看

    Java多线程详解_java支持多线程

    耗时) 针对多核CPU,我目前见过两种比较合理的公式: 最佳线程数=CPU核数×[1+(I/O耗时/CPU耗时)] 线程数=CPU核数×目标CPU利用率×(1+平均等待时间/平均工作时间) 参考: java 多线程:创建多少线程才合适?

    2K21编辑于 2022-09-23
  • 来自专栏学习计划

    多线程7 ReentrantLock原理

    aqs的队列里,头节点header线程对象一直是null,所有等待线程都是排在后面的

    46520发布于 2021-01-29
  • 来自专栏Java面试通关手册

    Java多线程学习(一)Java多线程入门

    blog.csdn.net/qq_34337272/article/details/79640870 系列文章传送门: Java并发编程专栏 Java多线程学习(一)Java多线程入门 Java多线程学习 (二)synchronized关键字(1) Java多线程学习(二)synchronized关键字(2) Java多线程学习(三)volatile关键字 Java多线程学习(四)等待/通知(wait/notify )机制 最近听很多面试的小伙伴说,网上往往是一篇一篇的Java多线程的文章,除了书籍没有什么学习多线程的一系列文章。 但是仅仅凭借一两篇文章很难对多线程有系统的学习,而且面试的时候多线程这方面的知识往往也是考察的重点,所以考虑之下决定写一系列关于Java多线程的文章。文章参考了高老师的《Java多线程编程核心技术》。 力争使用最短的篇幅把Java多线程的知识作以系统的讲述。

    2.7K141发布于 2018-06-17
  • 来自专栏Java系列学习与数据结构算法

    Java多线程的使用(超级超级详细)线程池 7

    Java多线程的使用(超级超级详细)线程池 7 什么是线程池? 线程池是一个容纳多个线程的容器,线程池中的线程可以重复使用,无需反复创建线程而消耗过多的资源 *使用多线程的好处: 1.降低消耗,减少了创建和销毁线程的次数,每个线程都可以重复利用,可执行多个任务 2 ,但是严格意义上来讲,Excutor并不是一个线程池,而只是一个执行线程的工具,真正的线程池接口是java.util.concurrent.ExceutorService,要配置一个线程池是比较复杂的, 而且配置的线程池很可能不是最优的,因此java.util.cocurrent.Exceutors线程工程里提供了一些静态工厂,生成一些常用的线程池,官方建议使用Exceutors工程来创建线程池对象 创建线程池的方法 ; import java.util.concurrent.Executors; public class Main { public static void main(String[] args

    91720发布于 2020-09-27
  • 来自专栏日常技术分享

    Java多线程

    多线程实现的方式 扩展java.lang.Thread类 public class Thread1 extends Thread { private String name; public 注意:start()方法的调用后并不是立即执行多线程代码,而是使得该线程变为可运行态(Runnable),什么时候运行是由操作系统决定的。 从程序运行的结果可以发现,多线程程序是乱序执行。 在启动的多线程的时候,需要先通过Thread类的构造方法Thread(Runnable target) 构造出对象,然后调用Thread对象的start()方法来运行多线程代码。 线程调度 调整线程优先级:Java线程有优先级,优先级高的线程会获得较多的运行机会 Java线程的优先级用整数表示,取值范围是1~10,Thread类有以下三个静态常量: static int MAX_PRIORITY java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查), 将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用, 从而保证了该变量的唯一性和准确性

    1.3K20发布于 2018-12-28
  • 来自专栏Java 源码分析

    Java多线程

    1.复写run方法的目的在于,把要运行的代码放到run方法里面,也就是新的线程要跑什么内容 这也就是第一种多线程的方法,其主要的步骤如下: 继承Thread类 复写run方法 创建对象 start i++) { System.out.println("main---"+i); } } } 3.第一种创建线程的方式其实会有很大的局限性,例如说,我们说java 是单继承的语言,那么也就会出现一个class继承了父类,无法在继承Thread类 而java却是多实现的,我们就可以继承runnable接口完成。 但是注意,runnable接口并不是一个Thread类的对象,说白了他不是一个线程,那么我们 就不知道我们多线程到底要运行哪的代码,不明确run方法。 这里顺带说同步函数使用的锁其实就是this 然后如果是静态同步函数的话,我们知道静态函数不可能使用this,因为他不属于对象而是属于类 这里也就是类的字解码文件 类名.class 就是这个 7.

    1.3K40发布于 2018-04-17
  • 来自专栏Michael阿明学习之路

    Java 多线程

    认识线程 Thread 2.1 继承 Thread 类实现多线程 2.2 实现 Runnable 接口实现多线程 2.3 两者对比 3. 线程的状态 4. 多线程的同步 5.1 同步代码块 5.2 同步方法 5.3 死锁 6. 线程间通信 7. 线程生命周期控制 1. 多线程意味着一个程序的多行语句可以看上去几乎同时运行 同类的多个线程是共享一块内存空间和一组系统资源,而线程本身的数据通常只有微处理器的寄存器数据,以及一个供程序执行时使用的堆栈。 解决上面问题:需要线程间通信 Java是通过 Object类 的 wait、 notify、 notifyall 这几个方法来实现线程间的通信的,又因为 所有的类都是从 Object 继承的,任何类都可以直接使用这些方法 7.

    2.1K40编辑于 2022-11-26
  • 来自专栏java

    Java多线程

    Java多线程 1 多线程介绍 2 为什么要用多线程? Runnable接口、实现Callable接口的区别 6 线程状态管理 6.1 线程睡眠(sleep) 6.2 线程让步(yield) 6.3 线程合并(join) 6.4 停止线程 6.5 设置优先级 7 ,创建线程代价比较小; Java语言内置了多线程功能支持,简化了java多线程编程。 倒计时:6 倒计时:5 倒计时:4 倒计时:3 倒计时:2 倒计时:1 倒计时:0 扩展 Java线程调度是Java多线程的核心,只有良好的调度,才能充分发挥系统的性能,提高程序的执行效率。 java允许多线程并发控制,当多个线程同时操作一个可共享资源变量时(如对其进行增删改查操作),会导致数据不准确,而且相互之间产生冲突。

    91010编辑于 2024-04-23
  • 来自专栏用户8637799的专栏

    java多线程

    java多线程 进程与线程 进程:是程序的一次执行过程,或是正在运行的一个程序,是一个动态的过程,有它自身的产生,存在和消亡的过程。 创建线程的三种方式 继承 Thread 类、实现 Runnable 接口、实现Callable接口 继承Thread类实现多线程案例模拟 //主线程 /* *实现多线程,分别打印不同的数字 */ public Thread-0线程打印:1 main线程打印:8 main线程打印:9 */ 实现Callable接口实现多线程 Callable和Runnable都是接口的形式实现多线程但是Callable可以有返回值 / synchronized关键字 1. synchronized原理 在java中,每一个对象有且仅有一个同步锁。 线程的优先级 在 Java 的线程操作中,所有的线程在运行前都会保持在就绪状态,那么此时,哪个线程的优先级高,哪个线程就有可能会先被执行。

    1.3K10编辑于 2022-09-09
  • 来自专栏Web前后端、全栈出发

    Java 多线程

    线程的创建 和 使用: JAVA实现多线程方式: 4种 JDK5.0之后新增两种: 线程的创建和启动: Java语言的JVM允许程序运行多个线程,它通过 Java.lang.Thread 类来体现 Thread ,只有调用:start(); 方法 多线程中的run()方法,不要手动调用,那样并不是多线程执行…只是正常的调用run() 方法调用! 只有通过:线程对象.start(); 才是正确的多线程就绪方法, Java底层会去开启多线程调用run(); 多线程执行run() 中的步骤! 实现Runnable接口: RunnableTest.java package com.wsm.thread; /** * 创建多线程的方式二:实现Runnable接口 * 1. 7.B执行了: sleep() 进入了休眠~ "但,sleep() 线程进入阻塞,持有锁...A还是进不来~" 8.B调用 wait(); 线程进入阻塞,并释放了锁... 9.A获得了锁,一次循环执行结束

    50310编辑于 2024-08-06
  • 来自专栏待你如初见

    Java多线程

    Java多线程基础概念 程序是指令、数据及其组织形式的描述,进程是程序的实体。 进程:程序(任务)的执行过程,具有动态性;持有资源(共享内存,共享文件)和线程,是系统进行资源分配和调度的基本单位。 线程:有时被称为轻量级进程,是程序执行流的最小单元,线程共享进程的所有资源 进程和线程的关系:一对多,同一进程可以拥有多个线程 线程之间的关系(交互):互斥、同步 线程的实现方法 1、继承java.lang 包下的Thread类,覆写Thread的run()方法 2、实现java.lang.Runnable接口,同样在run()方法中实现运行在线程上的代码 volatile volatile保证了线程能够正确的读取其他线程写入的值 ,解决了可见性的问题 多线程目的 多线程编程的目的,就是”最大限度地利用CPU资源”,当某一线程的处理不需要占用CPU而只和I/O,OEMBIOS等资源打交道时,让需要占用CPU资源的其它线程有机会获得 Object.wait, Thread.join和Thread.sleep三种方法之一阻塞,那么,它将接收到一个中断异常(InterruptedException),从而提早地终结被阻塞状态,然后该线程还是继续运行的 @Java

    68930发布于 2018-08-02
  • 来自专栏全栈开发日记

    Java多线程①)

    Thread.currentThread().getName():返回主线程的名字;

    64410编辑于 2022-05-12
  • Java多线程

    java 中的乐观锁基本都是通过 CAS 操作实现的,CAS 是一种更新的原子操作,比较当前值跟传入值是否一样,一样则更新,否则失败。 ); Thread t4 = new Thread(runnable); t1.start(); t2.start(); t3.start(); t4.start();}7. Java的垃圾回收也是一个守护线程。守护线的好处就是你不需要关心它的结束问题。 线程同步java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如增删改查),将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作前,被其他线程调用,从而保证该变量的唯一性和准确性 9.1 同步方法synchronized修饰方法,java每个对象都有一个内置锁,当用了synchronized修饰后,内置锁会保护整个方法。

    52710编辑于 2024-03-08
  • 来自专栏半月无霜

    Java多线程

    Java多线程 一、介绍 在了解线程之前,还需要简单了解进程的概念。简单的来说就是一心多用 在生活之中,我们常常可以一心多用。我可以一边打游戏,一边放着音乐听听歌,甚至可以再泡个脚。 没错,这也可以理解成我的多线程生活。 而在计算机之中,也有以上同时进行的任务,这就可以叫做多线程,例如 进程:比如说电脑上开着游戏,音乐等其他多款应用。 在java中,我们从Main方法运行,所以称其为主线程 除了主线程外,java还有一个后台线程在默默地工作着,这就是GC线程,也就是垃圾回收所处的线程 二、Java线程的实现 1)继承Thread Thread(ticketServer, "B").start(); new Thread(ticketServer, "C").start(); } } 预期将会是,10,9,8,7… ,而多线程的锁是面试的常客,synchronized关键字锁住的对象这一知识点必须要掌握。

    93140编辑于 2023-03-03
领券