第1章 课前准备

1-1 前言 (00:49)

第2章 Thread VS Runnable

2-1 回顾线程创建的两种方式 (02:33)

继承Thread类

class MyThread extends Thread {
public void run() { }
} public class Hello {
public static void main(String[] args) {
MyThread mt = new MyThread();// 创建线程
mt.start();// 启动线程
}
}

实现Runnable接口

class MyThread implements Runnable {
public void run() { }
} public class Hello {
public static void main(String[] args) {
MyThread mt = new MyThread();
Thread td = new Thread(mt);// 创建线程
td.start();// 启动线程
}
}

2-2 应用Thread模拟卖票 (07:54)

class MyThread extends Thread {
private int ticketsCont = 5;// 一共有5张票
private String name; public MyThread(String name) {
super();
this.name = name;
} public void run() {
while (ticketsCont > 0) {
ticketsCont--;
System.out.println(name + "卖了1张票,剩余票数为:" + ticketsCont);
}
}
} public class TicketsThread {
public static void main(String[] args) {
// 创建三个线程,模拟三个窗口卖票
MyThread mt1 = new MyThread("窗口1");
MyThread mt2 = new MyThread("窗口2");
MyThread mt3 = new MyThread("窗口3"); // 启动这三个线程,也即是窗口,开始卖票
mt1.start();
mt2.start();
mt3.start();
}
}

2-3 应用Runnable模拟卖票 (09:08)

class MyThread implements Runnable {
private int ticketsCont = 5;// 一共有5张票 public void run() {
while (ticketsCont > 0) {
ticketsCont--;
System.out.println(Thread.currentThread().getName() + "卖了1张票,剩余票数为:" + ticketsCont);
}
}
} public class TicketsRunnable {
public static void main(String[] args) {
MyThread mt = new MyThread();
// 创建三个线程来模拟三个售票窗口
Thread th1 = new Thread(mt, "窗口1");
Thread th2 = new Thread(mt, "窗口2");
Thread th3 = new Thread(mt, "窗口3"); // 启动这三个线程,也即是三个窗口,开始卖票
th1.start();
th2.start();
th3.start();
}
}

2-4 应用揭秘 (02:42)

两种方式的比较

Runnable方式可以避免Thread方式由于Java单继承特性带来的缺陷

Runnable的代码可以被多个线程(Thread实例)共享,适合于多个线程处理同一资源的情况

第3章 线程的生命周期和守护线程

3-1 线程的生命周期 (04:21)

3-2 守护线程理论知识 (02:57)

3-3 守护线程代码示例 (10:23)

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Scanner; class DaemonThread implements Runnable { @Override
public void run() {
// TODO Auto-generated method stub
System.out.println("进入守护线程" + Thread.currentThread().getName());
try {
writeToFile();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("退出守护线程" + Thread.currentThread().getName());
} private void writeToFile() throws Exception {
// TODO Auto-generated method stub
File filename = new File("E:" + File.separator + "daemon.txt");
OutputStream os = new FileOutputStream(filename, true);
int count = 0;
while (count < 999) {
os.write(("\r\nword" + count).getBytes());
System.out.println("守护线程" + Thread.currentThread().getName() + "向文件中写入了word" + count++);
Thread.sleep(1000);
}
}
} public class DaemonThreadDemo { public static void main(String[] args) {
System.out.println("进入主线程" + Thread.currentThread().getName()); DaemonThread daemonThread = new DaemonThread();
Thread thread = new Thread(daemonThread);
thread.setDaemon(true);
thread.start(); Scanner sc = new Scanner(System.in);
sc.next(); System.out.println("退出主线程" + Thread.currentThread().getName());
}
}

3-4 使用jstack生成线程快照 (11:38)

第4章 课程总结

4-1 课程总结 (02:13)

慕课网_细说多线程之Thread VS Runnable的更多相关文章

  1. 细说多线程之Thread VS Runnable

    [线程创建的两种方式] [线程的生命周期] ● 就绪:创建了线程对象后,调用了线程的start(). (注意:此时线程只是进入了线程队列,等待获取CPU服务,具备了运行的条件,但并不一定已经开始运行了 ...

  2. 细说多线程之Thread与Runnable

    1:创建线程的两种方式: 继承Thread类 public class MyThread extends Thread { @Override public void run() { } } MyTh ...

  3. Java多线程之Thread、Runnable、Callable及线程池

    一.多线程 线程是指进程中的一个执行流程,一个进程中可以有多个线程.如java.exe进程中可以运行很多线程.进程是运行中的程序,是内存等资源的集合,线程是属于某个进程的,进程中的多个线程共享进程中的 ...

  4. 三、多线程之Thread与Runnable的区别

    Thread与Runnable的区别(用三个窗口同时出售10张车票为例子) 运行代码 运行结果 分析 System.out.println("开始测试多线程");class MyT ...

  5. Android线程之Thread 、Runnable 的两个例子

    Thread例子: package fy.test; import android.app.Activity; import android.os.Bundle; import android.os. ...

  6. 多线程编程(三)--创建线程之Thread VS Runnable

    前面写过一篇基础的创建多线程的博文: 那么本篇博文主要来对照一下这两种创建线程的差别. 继承Thread类: 还拿上篇博客的样例来说: 四个线程各自卖各自的票,说明四个线程之间没有共享,是独立的线程. ...

  7. 多线程之thread和runnable

    Runnanle方式可以避免Thread由于单继承特性带来的缺陷. Runnable代码可以被多个线程(thread实例)共享,适用于多个线程处理同一资源的情况. 线程的生命周期:创建,就绪,阻塞,运 ...

  8. Java基础-进程与线程之Thread类详解

    Java基础-进程与线程之Thread类详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.进程与线程的区别 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 ...

  9. iOS多线程之Thread

    多线程 • Thread 是苹果官方提供的,简单已用,可以直接操作线程对象.不过需要程序员自己管理线程的生命周期,主要是创建那部分 优缺点 面向对象,简单易用 直接操作线程对象 需要自己管理线程生命周 ...

随机推荐

  1. 普元 BPS表结构参考

    BPS表结构 BPS默认采用数据库方式对业务流程的定义以及运行期的流程实例.活动.工作项等进行持久化存储.主要包括BPS流程流转相关的定义.实例.工作项.参与者相关的数据表以及和实际业务流程控制相关的 ...

  2. Itextpdf + Adobe Acrobat DC填充模板生成pdf快速入门

    Itextpdf + Adobe Acrobat DC填充模板生成pdf快速入门 生成pdf有很多种方法,如通过freemarker,或 使用itextpdf.本文将使用itextpdf生成pdf 1 ...

  3. keras训练大量数据的办法

    最近在做一个鉴黄的项目,数据量比较大,有几百个G,一次性加入内存再去训练模青型是不现实的. 查阅资料发现keras中可以用两种方法解决,一是将数据转为tfrecord,但转换后数据大小会方法不好:另外 ...

  4. xss过滤方法

    用的白名单过滤,是我们的论坛自用的方法,也许考虑不周,欢迎来黑我们的论坛!https://www.ebcms.com/forum.html // 安全过滤 function safe_html($ht ...

  5. ffmpeg函数05__vcodec_decode_video2()

    vcodec_decode_video2()的作用是解码一帧视频数据

  6. sudo 不用输入密码

    3. 设置当前登陆用户免密 使用visudo打开sudoers并编辑 sudo visudo 在刚才编辑的内容中加上NOPASSWD: linuxidc ALL=(ALL:ALL) NOPASSWD: ...

  7. 《Python 3标准库》

    在本书中,你会看到用来处理文本.数据类型.算法.数学计算.文件系统.网络通信.Internet.XML.Email.加密.并发性.运行时和语言服务等各个方面的实用代码和解决方案.在内容安排上,每一节都 ...

  8. linux中的selinux到底是什么

    一文彻底明白linux中的selinux到底是什么 2018年06月29日 14:17:30 yanjun821126 阅读数 58877 标签: SElinux 更多 个人分类: Linux   一 ...

  9. sh_01_列表基本使用

    sh_01_列表基本使用 name_list = ["zhangsan", "lisi", "wangwu"] # 1. 取值和取索引 # ...

  10. 【CF1262F】Wrong Answer on test 233(数学)

    题意:给定n道题目,每道题目有k个选项,已知所有正确选项,选对1题得1分 问循环后移一格后总得分s2大于原先总得分s1的方案数 n<=2e5,1<=k<=1e9 思路:特判k=1 e ...