美文网首页
Java系列之多线程

Java系列之多线程

作者: csuhan | 来源:发表于2019-07-07 16:33 被阅读0次

多线程创建方法

  1. 继承Thread类,但是受限于单继承
  2. 实现Runnable接口,是最常用的方法
  3. 实现Callble接口,可以从run方法中返回值

线程的中断机制

由于线程的stop方法已经不推荐使用了,因此可以采用中断的方法。其基本思路为在外部设置线程的中断状态,从内部判断何时中断。如下代码所示:

//Main.class
Thread t1 = new Thread(new MyThread());
t1.start();
if(some condition){
  t1.interrupt();
}
//MyThread.class
public void run(){
  if(Thread.currentThread().isInterrupted()){
    break;
  }
}

隐式锁(synchronized)

synchronized有两种用法。
一种是修饰方法名:

public synchonized void methodA(){};

另一种是对代码块使用synchronized(Object),如

synchronized(this){
//dome something
}

不通使用方法的效率也不同,最高效的是锁定一个较为小的对象(Object),然后在方法内使用。

private byte[] locks = new byte[1];
public void mathodB(){
  synchronized(this.locks){
  //do something
  }
}

显式锁Lock和ReentrantLock

Lock接口中所有的锁都是显式的,其位于java.util.concurrentLocks.Lock,及JUC包中,核心方法有lock(),unlock(),tryLock(),实现的类有ReentrantLock,ReentrantReadWriteLock.ReadLock,ReentrantReadWriteLock.WriteLock
void lock():获得锁,如果锁不可用,则将禁用当前线程,并在获得所之前,一直处于休眠状态
boolean tryLock():尝试获得锁,仅在锁空闲时才获得锁,如果锁可用,则获得锁,返回true,否则将立刻返回false。
blloean tryLock(long ParamLong,TimeUtil ParamTimeUtil) throw InterruptedException:如果锁在给定时间内空闲,并且线程未中断,则获得锁,否则返回false。
void unlock():解除锁

ReadWriteLock和ReentrantReadWriteLock

public interface ReadWriteLock{
  Lock readLock();
  Lock writeLock();
}

ReadWriteLock适用于读操作较多,写操作较少的场景。其ReadLock的多个读线程可以访问同一个资源,而仅有一个写线程可以访问资源。即:读-读不互斥、读-写互斥、写-写互斥。

相关文章

  • Java系列之多线程

    多线程创建方法 继承Thread类,但是受限于单继承 实现Runnable接口,是最常用的方法 实现Callble...

  • 2018-08-15

    java学习第一天之多线程 包:java.lang : 类:class...

  • 【java基础】线程

    java基础 线程 参考详细:Java之多线程 一、创建线程 创建线程常见有两种方式,另外有两种新增方式 1.Th...

  • java多线程--Callable

    **移步[java多线程系列文章]Java多线程(二十二)---LockSupport工具Java 停止线程 一、...

  • Java之多线程

    这个东西不用说,必学,必用,面试必问 一.概念 先来介绍一下进程线程的区别,进程就是一个电脑上运行的各个应用程序....

  • Java之多线程

    Thread(耦合,不推荐) Runnable(解耦,推荐) Executors ExecutorService ...

  • Java之多线程

    今天考虑有关线程的代码问题,如何写多线程,什么的东西应该定义为线程?等等等。。 随笔记下来,防止后面忘记了。。什么...

  • Java之多线程

    Java多线程概念 进程(Process):  进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态...

  • java之多线程

    1、 什么是进程? 一个进程代表一个应用程序 2、多进程有什么作用? 单进程计算机只能做一件事情。 多进程不是提高...

  • JAVA之多线程

    ▷ 进程、线程和多线程 进程: 定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统...

网友评论

      本文标题:Java系列之多线程

      本文链接:https://www.haomeiwen.com/subject/bryyhctx.html