慕课网_细说多线程之Thread VS Runnable
第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的更多相关文章
- 细说多线程之Thread VS Runnable
[线程创建的两种方式] [线程的生命周期] ● 就绪:创建了线程对象后,调用了线程的start(). (注意:此时线程只是进入了线程队列,等待获取CPU服务,具备了运行的条件,但并不一定已经开始运行了 ...
- 细说多线程之Thread与Runnable
1:创建线程的两种方式: 继承Thread类 public class MyThread extends Thread { @Override public void run() { } } MyTh ...
- Java多线程之Thread、Runnable、Callable及线程池
一.多线程 线程是指进程中的一个执行流程,一个进程中可以有多个线程.如java.exe进程中可以运行很多线程.进程是运行中的程序,是内存等资源的集合,线程是属于某个进程的,进程中的多个线程共享进程中的 ...
- 三、多线程之Thread与Runnable的区别
Thread与Runnable的区别(用三个窗口同时出售10张车票为例子) 运行代码 运行结果 分析 System.out.println("开始测试多线程");class MyT ...
- Android线程之Thread 、Runnable 的两个例子
Thread例子: package fy.test; import android.app.Activity; import android.os.Bundle; import android.os. ...
- 多线程编程(三)--创建线程之Thread VS Runnable
前面写过一篇基础的创建多线程的博文: 那么本篇博文主要来对照一下这两种创建线程的差别. 继承Thread类: 还拿上篇博客的样例来说: 四个线程各自卖各自的票,说明四个线程之间没有共享,是独立的线程. ...
- 多线程之thread和runnable
Runnanle方式可以避免Thread由于单继承特性带来的缺陷. Runnable代码可以被多个线程(thread实例)共享,适用于多个线程处理同一资源的情况. 线程的生命周期:创建,就绪,阻塞,运 ...
- Java基础-进程与线程之Thread类详解
Java基础-进程与线程之Thread类详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.进程与线程的区别 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 ...
- iOS多线程之Thread
多线程 • Thread 是苹果官方提供的,简单已用,可以直接操作线程对象.不过需要程序员自己管理线程的生命周期,主要是创建那部分 优缺点 面向对象,简单易用 直接操作线程对象 需要自己管理线程生命周 ...
随机推荐
- 《编译原理》-用例题理解-自底向上的语法分析,FIRSTVT,LASTVT集
<编译原理>-用例题理解-自底向上的语法分析,FIRSTVT,LASTVT集 上一篇:编译原理-用例题理解-自顶向下语法分析及 FIRST,FOLLOW,SELECT集,LL(1)文法 本 ...
- 三大方面,分析 to B和 to C产品的区别
作为互联网从业者,我们经常听到to B(或2B)和to C(或2C)两个概念.to B即面向企业客户,to C即面向普通用户.只要是互联网人基本都懂知道这两个概念,但如果别人再问“to B和to C产 ...
- 前端面试题-CSS优先级
一.选择器优先级 浏览器通过优先级来判断哪一些属性值与一个元素最为相关,从而在该元素上应用这些属性值.优先级是基于不同种类选择器组成的匹配规则. 二.优先级计算 优先级就是分配给指定的CSS声明的一个 ...
- django前戏
Django前戏: 1.软件开发: C/S 客户端与服务端 HTTP(超文本传输协议):协议的由来,如同sql语句由来一样.为了开发使用方便所形成的统一接口统一规范 学习Django之前我们先来了解下 ...
- window下,nodejs安装http-server,并开启HTTP服务器
1.下载nodejs 官方下载地址:https://nodejs.org/en/ 2.在cmd命令中,输入node -v 输入出版本号,代表安装成功. 3.输入 npm install http-s ...
- maven生成jar包编码问题
要做一个jar文件供外部调用,此jar的源代码中注释为中文,用maven打包后在其它工程中导入后总不能正常显示中文,记录解决方法如下: 在pom.xml中设置默认编码类型为UTF-8: <pro ...
- PHP preg_match正则表达式
行定位符 ^表示开始 $表示结束 preg_match(模式,待搜索的字符串,$matches) 其中matches为可选参数,一旦匹配上,可以返回匹配结果 举个例子: $pattern = '/#\ ...
- Redis——SpringBoot项目使用Lettuce和Jedis接入Redis集群
Jedis连接Redis: 非线程安全 如果是多线程环境下共用一个Jedis连接池,会产生线程安全问题,可以通过创建多个Jedis实例来解决,但是创建许多socket会影响性能,因此好一点的方法是使用 ...
- 【leetcode】1255. Maximum Score Words Formed by Letters
题目如下: Given a list of words, list of single letters (might be repeating) and score of every charact ...
- zTree 节点展开
var treeObj = $("#treeDemo"); $.fn.zTree.init(treeObj, setting, Znode1); zTree_Menu = $.fn ...