线程

1.基本概念

多线程是实现并发机制的一种有效手段。进程和线程一样,都是实现并发的一个基本单位。线程是比进程更小的执行单位,线程是进程的基础之上进行进一步的划分。所谓多线程是指一个进程在执行过程中可以产生多个更小的程序单元,这些更小的单元称为线程,这些线程可以同时存在,同时运行,一个进程可能包含多个同时执行的线程。

2.Java中的线程

方法1
继承了Thread类就可以当线程使用

class Cat extends Thread{int times = 0;@Overridepublic void run() {while (times < 10) {times++;System.out.println("kakaka" + times);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}
}

直接调用Run方法不会开启新线程

调用Cat实例类的start()方法,就会从JVM层级开启新线程

方法2
实现Runnable接口,并传入Thread()构造器

class Thread2 implements Runnable {int i = 0;@Overridepublic void run() {while (i < 10){try {System.out.println("current thread is " + Thread.currentThread().getName());Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}public static void main(String[] args) {Thread2 t = new Thread2();Thread tt = new Thread(t);t.run();}
}

下面是多线程卖票问题,发现并发问题,ticket_num判断导致的

stop停止功能

public class ticket {public static void main(String[] args) {seller s1 = new seller();seller s2 = new seller();seller s3 = new seller();s1.start();s2.start();s3.start();Thread.sleep(4000);s1.stopsell();}
}
class seller extends Thread {static int ticket_num = 100;static boolean sellable = true;@Overridepublic void run() {while (ticket_num > 0 && sellable){try {Thread.sleep(100);System.out.println(Thread.currentThread().getName() + "卖票一张,还剩" + --ticket_num);} catch (InterruptedException e) {e.printStackTrace();}}}public void stopsell(){sellable = false;}
}

子线程让位主线程,在a线程调用b线程.join,会让b线程先运行完

public class Thread3 {public static void main(String[] args) throws InterruptedException {int j  = 0 ;Thread t = new Thread(new t1());t.start();while (j < 20){System.out.println("主线程" + ++j);Thread.sleep(1000);if (j == 4){t.join();}}}}class t1 implements Runnable{int i = 0;@Overridepublic void run() {while (i <= 20){System.out.println("子线程安排" + ++i);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}
}

守护线程

作用相当于主线程的保姆,主线程完事,守护线程也完事了。

public class MyDaemonThread {public static void main(String[] args) {DThread d = new DThread();d.setDaemon(true);d.start();for(int i = 0; i <=50;i++){System.out.println("主线程"+Thread.currentThread().getName());}}}class DThread extends Thread{@Overridepublic void run() {while (true){System.out.println("守护线程安排"+ Thread.currentThread().getName());}}
}

1.new
2.(runnable)running
3.(runnable)ready
4.waiting
5.timed_waiting
6.terminated

线程同步机制
用static + synchronized 修饰卖方法

public class syn {public static void main(String[] args) throws InterruptedException {syn_seller s1 = new syn_seller();syn_seller s2 = new syn_seller();syn_seller s3 = new syn_seller();s1.start();s2.start();s3.start();}
}class syn_seller extends Thread {static int ticket_num = 100;static boolean sellable = true;@Overridepublic void run() {sell();}public  synchronized void sell() {while (ticket_num > 0 && sellable){try {Thread.sleep(100);System.out.println(Thread.currentThread().getName() + "卖票一张,还剩" + --ticket_num);Thread.sleep(100);} catch (InterruptedException e) {System.out.println(Thread.currentThread().getName() + "被中断了!!!!");}}}
}

练习题1

练习题2

1答案

public class homework {public static void main(String[] args) {Thw1 t1 = new Thw1();Thw2 t2 = new Thw2(t1);t1.start();t2.start();}}class Thw1 extends Thread{static Boolean running = true;@Overridepublic void run() {Random r = new Random();while (running){System.out.println(r.nextInt(100));try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}}}
}class Thw2 extends Thread{private Thw1 thw1;private final Scanner scanner = new Scanner(System.in);public Thw2(Thw1 thw1){this.thw1 = thw1;}@Overridepublic void run() {while (true){char in = scanner.next().toUpperCase().charAt(0);if(in == 'Q'){Thw1.running = false;break;}}}
}

2答案

public class homework2 {public static void main(String[] args) {Account c1 = new Account(1);Account c2 = new Account(2);c1.start();c2.start();}
}class Account extends Thread{static int money = 10000;Scanner s = new Scanner(System.in);int clientNum;public Account(int clientNum){this.clientNum = clientNum;}@Overridepublic void run() {while (true){int i = s.nextInt();if(i == clientNum){withdraw();}}}public synchronized void withdraw(){if(money <= 0){System.out.println("余额不足");}else {System.out.println(Thread.currentThread().getName() + "取钱1000 , 余额: " + (money-=1000));}}
}

java线程知识初级相关推荐

  1. Java线程知识整理汇总

    优先级 priority 所有线程都有优先级属性 priority,值比较大的会被优先执行 priority 最小值是 1,最大值是 10,默认值是 5 子线程 priority 的初始值跟父线程的 ...

  2. java线程知识体系

    1 java多线程基础概念 2 java线程生命周期 3 线程三种创建方式与线程池的应用 4 多线程的安全问题的解决与死锁 5 java synchronized静态同步方法与非静态同步方法,同步语句 ...

  3. java线程知识梳理_Java多线程——多线程相关知识的逻辑关系梳理

    1 学习多线程知识的根本目标 多线程知识的根本目标是:设计稳健的并发程序. 当然,本文无法回答这个实践性很强的问题(这与具体的业务相关,涉及到具体的策略),本文主要阐述相关知识之间的关系,希望初学者不 ...

  4. Java 线程 知识

    学习线程 先了解 线程与进程之间的关系 线程:  (线程是cpu调度的最小单位) 我们可以说是进程中执行运算的最小单位. 进程: (进程是资源分配的最小单位) 我们可以说是一段程序执行的过程, 如果还 ...

  5. java线程知识总结

    (1)线程的状态以及互相转换 NEW,RUNNABLE,WAITING,TIMED_WAITING,BLOCKED,TERMINATED new  Thread()  ----NEW 准备就绪,等到c ...

  6. Java线程知识梳理

    Thread 自定义线程类继承Thread类 重写run()方法,编写线程执行体 创建线程对象,调用start()方法启动线程 线程不一定立即执行,CPU安排调度 多线程图片下载 package Th ...

  7. Java线程知识你还记得多少?

    /   今日科技快讯   / 近日发布的<2021年企业年终奖发放计划调研报告>显示,2021年年终奖的人均水平为2.3万元, 2021年企业年终奖额度相当于员工2.1倍月薪.41%的企业 ...

  8. 技术理论-【Thread】- java线程知识总结

    概念: 背景 程序,进程,线程,多任务,主线程 三高应用(高可用,高性能,高并发) 学习理论(守破离,断舍离), lambda(JDK8,内部类<静态,局部,匿名,lambda>,函数式编 ...

  9. Java并发知识梳理(上):并发优缺点,线程状态转换,Java内存模型,Synchronized,Volatile,final,并发三特性,Lock与AQS,ReetrandLock

    努力的意义,就是,在以后的日子里,放眼望去全是自己喜欢的人和事! 整个系列文章为Java并发专题,一是自己的兴趣,二是,这部分在实际理解上很有难度,另外在面试过程中也是经常被问到.所以在学习过程中,记 ...

最新文章

  1. SQL 基础命令和函数
  2. 《JavaScript高级程序设计》阅读笔记(二):ECMAScript中的原始类型
  3. 修改linux路径,科学网-修改linux终端路径颜色-胡涛的博文
  4. 服务器型号惠普RX3600,384854-B21 389344-001 146G SAS 15K 3.5寸HP服务器硬盘批发
  5. matlab两个图共用一个x轴_Matlab Figures (3) —— 叠加作图与多坐标轴
  6. 今 天看到我十年前的一篇技术文章,想到不知不觉学编程十多年了,,
  7. 文献阅读 Linear Regression for Face Recognition
  8. python通信系统仿真_Python与V-REP联合仿真
  9. 微信公众号支付JSAPI
  10. 25 逆波兰表达式、波兰表达式
  11. excel批量删除所有空白行
  12. java nginx报502,Nginx 502错误排查及解决办法
  13. 如何购买云服务器----以华为云服务器为例
  14. 【web学习之Mysql】数据库-----查询操作------大全
  15. NovaMind_Crack5.5.7白金版.zip
  16. centos8上安装MP-SPDZ
  17. 初中地理人教版教案二-Leo老师
  18. 考研跨考计算机推荐学校,跨考计算机有哪些院校推荐
  19. [收藏]Warez术语
  20. mtls加密双向认证

热门文章

  1. 分布式锁的介绍与实现
  2. Orange Pi i96 入手填坑问题总结
  3. Angular2的核心概念详解
  4. [Java性能剖析] TPTP性能剖析介绍
  5. JSP页面元素的组成
  6. 优酷的视频地址获取接口
  7. Linphone callState 电话状态的监听状态(二)
  8. 用C++解决华为OD机试考题,是真的高效,真的强,来吧,清单奉上,祝你上岸
  9. 无人驾驶与人工驾驶的对比,人工驾驶的优缺点
  10. 对于目标文件系统,文件过大