首页 > 编程语言 >java 多线程

java 多线程

时间:2022-09-30 11:44:43浏览次数:62  
标签:Runnable java Callable 线程 new 多线程 Condition

  • 线程的状态:New、Runnable、Blocked、Waiting、Timed waiting、Terminated

  new Thread()——> New、 start()——> Runnable、 等待资源——>Blocked、wait()——> waiting 等

  • 锁:ReentrantLock, 条件对象:Condition
  • synchronized

  每个Object对象都有一个内部锁,synchronized关键字实际使用的就是内部锁,直接使用的wait()方法实际使用的是对象内部锁的条件。

  wait()——notifyAll——notify  对应  Condition.await()——Condition.signalAll()——Condition.signal()

  synchronized(obj){......} 获取的是obj的内部锁

  •   Volatile

  1.  修饰变量可见性,即主内存和工作内存同步

  2.  阻止相关字节码重排序

  •   new ThreadLocal<T>(){    T initialValue(){}} 为每个线程构造其局部对象
  • tryLock() 申请一个锁,成功返回true,否则立即返回false。可以传入超时参数
  • ReentrantReadWriteLock  读写锁,多线程读,少线程写很有用。拆分成读锁 readLock()和写锁writeLock()使用。
  • 阻塞队列 通过队列的方式分成生产线程和消费线程
  • java.util.concurrent 包中包含线程安全的集合,例如ConcurrentHashMap、ConcurrentLinkedQueue等 
  • Callable  and Future

  Callable 区别于Runnable, 其可以返回计算结果Future对象,也可以抛出异常。

  可以用 FutureTask包装Callable接口的对象,即

Callable<Integer> myComputation = ...; 
FutureTask<Integer> task = new FutureTask<Integer>(myComputation); 
Thread t = new Thread(task); 
t.start();
....;
Integer result = task.get();
  • 线程池

  Executor类工厂方法 :

newCachedThreadPool()   必要时创建新线程,空闲线程保留60秒
  newFixedThreadPool()   该池包含固定数量的线程,空闲线程会一直保留
  newSingleThreadExecutor()   只有一个线程的池,顺序执行每一个提交的任务
  newScheduledThreadPool   用于预定执行而构建的固定线程池,代替java.util.Timer
  newSingleThreadScheduledExecutor()   用于预定执行而构建的单线程池

 前三个返回实现了ExecutorService接口的ThreadPoolExecutor对象,使用submit(Runnable)或submit(Callable)提交任务

后两个返回实现ScheduledExecutorService接口的对象,可以定时或周期执行任务。

  • 控制任务组    ExecutorCompletionService
  • Fork-Join框架

 

标签:Runnable,java,Callable,线程,new,多线程,Condition
From: https://www.cnblogs.com/lostO/p/16744416.html

相关文章

  • PowerDesigner提示Could not Initialize JavaVM!
    PowerDesigner逆向mysql数据库报CouldnotInitializeJavaVM!提示,是因为powerdesigner基于32位JVM的原因。解决办法:安装32位的JDK或者安装mysql的ODBC驱动(重要提示:务......
  • Install4j for Mac(java安装程序创建器)
    Install4j版是一款很不错的java安装文件生成工具,提供强大的脚本编辑器、命令行编辑器、安装包设计IDE、JRE管理和部署等功能,主要用于生成java应用程序本地化的安装和应用程......
  • 用IO多路复用实现 nginx 静态资源代理(C/Java/Golang)
    用IO多路复用实现nginx静态资源代理(C/Java/Golang)效果展示代理HTML代理图片注意,静态资源代理基于HTTP,可以了解上一篇文章:几十行代码使用TCP简单实现HTT......
  • Java 模拟Terminal连接 Linux Console 源代码
    代码和效果如下,已经转换java文件为exe文件,注意要在Pom文件里面添加依赖。  packagecom.javassh3.javassh3;/*-*-mode:java;c-basic-offset:2;indent-tabs-mode:n......
  • java 获取当前时间并转化为yyyy-MM-dd HH:mm:ss格式 时间戳和字符串之间转换
    java获取当前时间并转化为yyyy-MM-ddHH:mm:ss格式时间戳和字符串之间转换方法一(线程不安全,不建议使用)privateSimpleDateFormatsdf=newSimpleDateFormat("yy......
  • Java获取当天或者明天等零点时间(00:00:00)0时0分0秒的方法 Calendar calendar = Calend
    Java获取当天或者明天等零点时间(00:00:00)0时0分0秒的方法Calendarcalendar=Calendar.getInstance();Java获取当天或者明天等零点时间(00:00:00)0时0分0秒的方法Sim......
  • java基础day-02
    第二章、面向对象一、什么是面向对象面向对象就是用人的世界观改变计算机世界观1.1对象万物皆可对象学习面向对象之前先了解什么是属性和行为?属性:表示的是事物的特征,是静态......
  • JAVA基础day05-实用类
    一、实用类介绍常用JavaAPI(封装在包里)Java.langEnum、包装类、Math、String、StringBuffer、System……java.util:工具类java.io:输入输出操作java.sql:数据库的操作……1.......
  • JavaWeb基础day01_XML
    一、XMLXML文件的默认打开方式是浏览器xml:是可扩展的标记语言ExtensibleMarkupLanguage。以一种标签语言与HTML类似1、xml的作用编写配置文件:C3P0编写XML配置文件做数据......
  • Day02-Java报表以及表格
    Java报表以及表格文章目录​​Java报表以及表格​​​​一、POI操作Excel​​​​1.1引入依赖​​​​1.2POI操作Excel高低版本区别​​​​1.3入门案例​​​​1.3.1低......