java 高并发编程详解阅读笔记(一)

第一章线程的认识:

1 线程的异步    和  java  jconsole   (控制台jconsole指令 可视化线程监控工具)

package com.unicom.file.demo;

import java.util.concurrent.TimeUnit;

/**
 * 

* *

* * @author chenkang * @since 2020/6/30 */ public class TryConcurrency { public static void main(String[] args) { //并列执行堵塞 只会执行一个 //browseNews(); //linstenMusic(); new Thread(TryConcurrency::browseNews).start(); linstenMusic(); } private static void browseNews(){ for (;;) { System.out.println("good news"); sleep(1); } } private static void linstenMusic(){ for (;;) { System.out.println("nice music"); sleep(1); } } private static void sleep( int seconds){ try { TimeUnit.SECONDS.sleep(seconds); } catch (InterruptedException e) { e.printStackTrace(); } } }

2 出号机示例代码

package com.unicom.file.demo;

/**
 * 

* 出票机线程 *

* * @author chenkang * @since 2020/6/30 */ public class TicketWindow extends Thread{ /** * 最大出票书 */ private static final int MAX =50; /** * 初识出票号 */ private static int index =1; public TicketWindow(String name) { super(name); } @Override public void run() { while (index
package com.unicom.file.demo;

/**
 * 

* *

* * @author chenkang * @since 2020/6/30 */ public class Demo { public static void main(String[] args) { //出票机index 未static修饰的情况下 TicketWindow oneWindow = new TicketWindow("一号出票机"); TicketWindow twoWindow = new TicketWindow("二号出票机"); TicketWindow threeWindow = new TicketWindow("三号出票机"); TicketWindow fourWindow = new TicketWindow("四号出票机"); oneWindow.start(); twoWindow.start(); threeWindow.start(); fourWindow.start(); //执行结果是 各自的出票机分别都是从1 到 50 执行各自的出票 //出票机index static修饰的情况下 //执行结果是 出票机顺序出票了 } }

static 不可能一直用,同时存在线程安全问题,引出了 Thread 类和 Runable 接口    Thread  注重的是 线程控制 Runable注重的是业务逻辑 来进行解决这一问题,Thread 中  如果 有Runable 实现的传递 则会执行  传递   ,否则需要重写Run  方法 

改造:

package com.unicom.file.demo;

/**
 * 

* *

* * @author chenkang * @since 2020/6/30 */ public class Demo { public static void main(String[] args) { TicketWindowRunable task= new TicketWindowRunable(); Thread one = new Thread(task, "一号出票机"); Thread two = new Thread(task, "二号出票机"); Thread three = new Thread(task, "三号出票机"); Thread four = new Thread(task, "四号出票机"); one.start(); two.start(); three.start(); four.start(); } }

 达到了和static 一样的效果

 

线程的生命周期:

NEW : 只是创建了线程示例 ,在没有start  之前该线程是根本不存在的,和普通的new  对象没什么区别

RUNABLE:在调用start之后  进入可运行状态,并没有真正的运行,只具备了运行的资格,什么时候调用看CPU 的调度

RUNING 状态 一旦CPU 轮训到该任务或者队列选中该线程,那么他才会真正的被执行

BLOCKED 等待

TERMINATED  死亡状态

 

你可能感兴趣的:(多线程)