入坑JAVA多线程
鱼机
这个作者很懒,什么都没留下…
展开
-
入坑JAVA多线程并发(二)线程的生命周期和常用方法
线程的生命周期大致分为五种状态:1. 新建:新建一个线程对象。2.可运行:启动线程,调用start方法或者调用线程池的excute方法等,此时线程会进入可运行线程池中,等待获取CPU的时间片。3.运行运行状态,也就是获得了CPU的时间片,执行run方法4.阻塞阻塞状态,线程因为某种原因让出了CPU的时间片,暂时停止运行。阻塞可能是调用了wait方法,I/O阻...原创 2018-06-03 23:55:55 · 575 阅读 · 0 评论 -
入坑JAVA多线程并发(一)创建线程的三种方式
java中创建线程的方式有三种,继承Thread,实现Runable,实现Callable;继承Threadr public class TheadTest extends Thread { @Override public void run() { System.out.println("已经启动线程"); }...原创 2018-05-31 22:42:51 · 297 阅读 · 0 评论 -
入坑JAVA多线程并发(三)同步锁synchronized
先来一个例子:public class Main { public static void main(String[] args) { ThreadTest test1 = new ThreadTest("线程1"); ThreadTest test2 = new ThreadTest("线程2"); test1.start(); ...原创 2018-06-09 11:04:40 · 435 阅读 · 0 评论 -
入坑JAVA多线程并发(六)死锁
在多线程的中,因为要保证线程安全,需要对一些操作进行加锁,但是如果操作不当,会造成死锁,导致程序无法运行下去。 形成死锁的场景:如果有两个线程,线程1和线程2,线程1运行,获得锁A,线程2运行,获得B,线程1等待锁B的释放,线程2等待锁A的释放,互相等待,形成一个死循环 代码如下:public class Main { public static void main(...原创 2018-06-24 09:48:39 · 380 阅读 · 0 评论 -
入坑JAVA多线程并发(七)volatile到底是什么
多线程中有三个特性:1、原子性:不可分割的一个操作,类似于数据库的事物。如下代码:> int a,b;a = 0; //1b = a; //2a = a+1; //3a++; //4上面4个语句中只有1是原子性操作,语句2:先取得a的值,再赋给b,语句3:取得a的值,再加1,最好赋给a;语句4:取得a的值,加1,再赋给a...原创 2018-06-24 11:38:50 · 287 阅读 · 0 评论 -
入坑JAVA多线程并发(八)详解ThreadLocal使用和原理
ThreadLocal是一个用于存储多线程变量的类,它可以把线程与设置的值对应起来,因为它为变量在每个线程都创建了一个副本。访问的时候每个线程只能访问到自己的副本变量。实例看如下代码:public class Main { public static void main(String[] args) throws InterruptedException { ...原创 2018-06-24 13:36:22 · 853 阅读 · 0 评论 -
入坑JAVA多线程并发(四)卖火车票了解一下
多线程最常用的两个例子就是:火车票和生产者消费者问题了,本文简单的实现一下卖火车票的例子, 首先创建车票类:class Ticket implements Runnable{ private int num; private int init = 1; private String lock; public Ticket(int num,String ...原创 2018-06-09 13:08:13 · 5936 阅读 · 0 评论 -
入坑JAVA多线程并发(五)生产者消费者模式
生产者消费者模式对于理解多线程是一个很经典,也很好的例子资源类:class Resource{ //资源初始化个数 private int init; //资源最大个数 private int Max; public Resource(int init,int Max){ this.init = init; th...原创 2018-06-09 15:35:58 · 626 阅读 · 0 评论 -
入坑JAVA多线程并发(九)CAS和ABA
如果了解数据库的悲观锁和乐观锁的话,对于理解CAS就很简单了,因为CAS就是乐观锁的具体实现。 悲观锁:在操作数据库时本能的觉得一定会有竞争,所以把数据锁住,不让其他事物对对应的数据进行操作,在本次操作之后把锁释放,其它事物才可以进行操作。这个在java里面就类似于synchronized。 乐观锁:在操作数据库时都觉得不会有其它事物和自己进行竞争,事物开始的时候就把对应的数据取出...原创 2018-07-17 21:32:42 · 1307 阅读 · 0 评论