Day24_多线程第一天
1、线程
1、概述
package cn.itcast.createThread;class MyThread extends Thread{@Overridepublic void run() {System.out.println("线程在运行");}}public class Demo1 {public static void main(String[] args) {MyThread mt = new MyThread();//启动线程mt.start();}}
package cn.itcast.createThread;class MyRunnable implements Runnable {@Overridepublic void run() {System.out.println("启动了");}}public class Demo {public static void main(String[] args) {//第一步:创建实现了Runnable接口的子类对象MyRunnable mr = new MyRunnable();//第二步:通过刚创建的mr对象创建Thread对象Thread thread = new Thread(mr);//第三步:启动线程thread.start();}}
public class MyThread extends Thread{@Overridepublic void run() {//设置线程名Thread.currentThread().setName("线程A");System.out.println(Thread.currentThread().getName());}public static void main(String[] args) {MyThread mt = new MyThread();mt.start();}}
package cn.itcast.create;public class MyRunnable implements Runnable{@Overridepublic void run() {//设置线程名Thread.currentThread().setName("线程A");System.out.println(Thread.currentThread().getName());}public static void main(String[] args) {Thread t = new Thread(new MyRunnable());t.start();}}

2、卖票案例(掌握)
1、有问题的代码(出现错误票)
/**卖票程序*/public class TicketRunnable implements Runnable{private int tickets = 100;@Overridepublic void run() {while(true){if(tickets > 0){try {Thread.sleep(1000);//必须加这个,由于CPU太快否则不一定出现负数-----语句1} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"正在卖第"+tickets--+"张的票");---语句2}else{break;//必须加这个,否则无法跳出循环,造成死机}}}}/**测试类*/public class TicketDemo {public static void main(String[] args) {TicketRunnable runnable = new TicketRunnable();Thread t1 = new Thread(runnable, "窗口1");Thread t2 = new Thread(runnable, "窗口2");Thread t3 = new Thread(runnable, "窗口3");t1.start();t2.start();t3.start();}}
修改后的代码/卖票案例完整代码public class TicketRunnable implements Runnable {private int tickets = 50;private Object lock = new Object();@Overridepublic void run() {while (true) {synchronized (lock) {if (tickets > 0) {try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+ "正在卖第" + tickets-- + "张的票");} else {break;}}}}}
3、锁,同步代码块,同步方法(这块记住结论就好,根据自身情况自行测试)
4、死锁(掌握)
/**锁对象*/public class Lock {public static final Object LOCK_A = new Object();public static final Object LOCK_B = new Object();}/**线程1*/public class Thread1 extends Thread {@Overridepublic void run() {synchronized (Lock.LOCK_A) {System.out.println("我是线程1,已经拿到A锁,将要去哪B锁");synchronized (Lock.LOCK_B) {System.out.println("我是线程1,成功拿到B锁");}}}}/**线程2*/public class Thread2 extends Thread {@Overridepublic void run() {synchronized (Lock.LOCK_B) {System.out.println("我是线程2,已经拿到B锁,将要去哪A锁");synchronized (Lock.LOCK_A) {System.out.println("我是线程2,成功拿到A锁");}}}}/**测试代码*/public class Test {public static void main(String[] args) {Thread1 t1= new Thread1();Thread2 t2= new Thread2();t1.start();t2.start();}}- //注意:以上代码可能不会死锁,如果必须产生死锁效果将run()方法中的所有内容用while(true)包裹起来
5、休眠线程(掌握)
package cn.itcast.createThread;public class MyThread extends Thread{@Overridepublic void run() {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}
6、守护线程
package cn.itcast.createThread;public class MyThread extends Thread{@Overridepublic void run() {while(true){System.out.println("xx");}}public static void main(String[] args) throws Exception {MyThread mt = new MyThread();mt.setDaemon(true);mt.start();//主线程在1S后结束,结束后mt线程也随之停止Thread.sleep(1000);}}
7、加入线程
package cn.itcast.createThread;public class MyThread extends Thread{@Overridepublic void run() {while(true){System.out.println("xx");}}public static void main(String[] args) throws Exception {MyThread mt = new MyThread();mt.start();mt.join();//因为mt线程被设置为加入线程,所以只有当mt线程执行完后你好才会执行System.out.println("你好");}}
8、设置线程优先级
线程默认优先级是5。范围是1-10
13、今天必须掌握的内容,面试题,笔试题。(掌握这个就可以放心学习后面的知识了)
Day24_多线程第一天的更多相关文章
- “全栈2019”Java多线程第一章:认识多线程
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- 秒杀多线程第一篇 多线程笔试面试题汇总 ZZ 【多线程】
http://blog.csdn.net/morewindows/article/details/7392749 系列前言 本系列是本人参加微软亚洲研究院,腾讯研究院,迅雷面试时整理的,另外也加入一些 ...
- 5天不再惧怕多线程——第一天 尝试Thread
随笔 - 218 文章 - 1 评论 - 3819 5天不再惧怕多线程——第一天 尝试Thread 原本准备在mongodb之后写一个lucene.net系列,不过这几天用到多线程时才发现自己 ...
- Java学习多线程第一天
内容介绍 Thread 线程创建 线程池 线程状态图 1 多线程 1.1 多线程介绍 学习多线程之前,我们先要了解几个关于多线程有关的概念. 进程:进程指正在运行的程序.确切的来说,当一个程序 ...
- Abap 多线程
http://scn.sap.com/thread/18844 SAP ABAP 实现多线程 第一步:初始化server group ,server group 可以用RZ12进行维护,参数支 ...
- 跟着刚哥梳理java知识点——多线程(十六)
创建多线程第一种方式:① 继承:继承Thread.② 重写:重写Thread类的run()方法③ 创建:创建一个子类的对象④ 调用:调用线程的start()方法,启动此线程,调用run()方法 cla ...
- Java 多线程(一)—— 概念的引入
并发和并行 并行:指两个或多个时间在同一时刻发生(同时发生): 并发:指两个或多个事件在一个时间段内发生. 在操作系统中,安装了多个程序,并发指的是在一段时间内宏观上有多个程序同时运行,这在单 C ...
- 多线程之 Thread类
一.多线程第一种方式的实现步骤(继承Thread类) 代码演示: 1.定义MyThread类,继承Thread类 2.重写了里面的run方法,在run方法中定义线程要执行的任务 public clas ...
- 收藏:c语言的多线程同步
1.<秒杀多线程第一篇 多线程笔试面试题汇总> 2.<秒杀多线程第二篇 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别> 3.<秒杀 ...
随机推荐
- RAM清理器
或许有些氨基小白不知道RAM是什么,官方的解释是"运行内存" 只要你的RAM够大,你玩什么都不卡! 今天给大家带来的就是 <RAM清理器>!!体积小,能量大就是我给他介 ...
- Codeforces Round #370 (Div. 2) E. Memory and Casinos (数学&&概率&&线段树)
题目链接: http://codeforces.com/contest/712/problem/E 题目大意: 一条直线上有n格,在第i格有pi的可能性向右走一格,1-pi的可能性向左走一格,有2中操 ...
- Ubuntu下Nutch1.2的使用
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeMAAABpCAIAAACGSdxlAAAAA3NCSVQICAjb4U/gAAAgAElEQVR4Xu ...
- java中的反射机制在Android开发中的用处
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反 ...
- POJ 1061
题意: 两只青蛙在同一条纬度上,它们各自朝西跳,问它们要跳多少步才能碰面(必须同时到达同一点). 分析: 假设它们跳了t步才相遇,青蛙a初始坐标为x,青蛙b初始坐标为y,则跳了t步相遇后a的坐标为 x ...
- iOS程序启动过程
First, the function creates the main application object (step 3 in the flowchart). If you specify ni ...
- webpack初学
写在前面的话 阅读本文之前,先看下面这个webpack的配置文件,如果每一项你都懂,那本文能带给你的收获也许就比较有限,你可以快速浏览或直接跳过:如果你和十天前的我一样,对很多选项存在着疑惑,那花一段 ...
- sprig里的controller之间的跳转的问题
学习spring的controller,发现controller之间的跳转有些地方搞的不是很清楚,如果通过controller的return语句实现跳转的话,会造成request的丢失:具体怎么回事首 ...
- c/c++常用网址
个人主页Dennis Ritchie's home pagehttp://cm.bell-labs.com/cm/cs/who/dmr/index.html Brian Kernighan's hom ...
- ubuntu方块乱码
更改下环境变量/etc/default/locale LANG="en_US.UTF-8"LANGUAGE="en_US:en"