多线程Thread类的方法
创建多个线程的第一种方法
1、定义一个Thread类的子类,比如MyThread类
2、重写Thread的run方法,设置线程任务
3、创建Mythread类的对象
4、调用方法start(),开启新的线程,执行run()方法
Thread的一些常用方法
public String getName():返回该线程的名字
static Thread currentThread(): 静态方法,返回当前的线程//返回的该线程的对象可以调用getName方法,得到当前线程名称
public void setName(String name):设置线程名称,创建的MyThread对象可以调用该方法设置线程名称
public static sleep(long milllis):当前线程暂停执行millis毫秒
MyThread类
public class MyThread extends Thread {
public MyThread(){
}
public MyThread(String name) {// 带参数的构造方法,可以用来设置线程名称
super(name);
}
@Override
public void run() {
String name = getName();
System.out.println(name);
}
}
方法的应用
public class Multithreading {
public static void main(String[] args) {
MyThread mt = new MyThread();
// 创建对象
// 调用start方法,开启新线程,执行run方法
//mt.start();//Thread-0
new MyThread().start();
new MyThread().start();
new MyThread().start();
System.out.println(Thread.currentThread().getName());
// 一共有5个线程,其中4个自己创建的线程,1个主线程,由于线程执行的顺序不一定,因此顺序是随机的
/*Thread-0
main
Thread-3
Thread-2
Thread-1*/
mt.setName("绿巨人");
mt.start();
new MyThread("钢铁侠").start();
}
}
sleep方法,可以用来当做计时器
package cn.zhuobo.day12.aboutMultithreading;
// public static void sleep(long millis):使当前正在执行的线程,以毫秒数暂停执行
public class Sleep {
public static void main(String[] args) {
for (int i = 0; i < 60; i++) {
System.out.println(i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {// 实现了每隔1s打印一个数字,因为当前的main线程每打印一个数字就会被sleep方法暂停1000ms
e.printStackTrace();
}
}
}
}
创建多个线程的第二种方法
java.lang.Runable
声明实现Runable接口的类, 该类然后实现run方法,然后new一个该类的实例,作为创建Thread对象的参数,并且启动该线程
1、创建一个Runable接口的实现类
2、在实现类中重写Runable接口的run方法
3、创建一个Runable实现类的对象
4、创建一个Thread对象,并在构造方法中传递第3步的实现类对象
5、Thread对象调用start方法,开启新线程,执行run方法
Runablle接口的实现类
package cn.zhuobo.day12.aboutMultithreading;
public class RunableImpl implements Runnable {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName() + "-->" + i);
}
}
}
开启新的线程
package cn.zhuobo.day12.aboutMultithreading;
public class RunableDemo {
public static void main(String[] args) {
RunableImpl run = new RunableImpl();// 创建Runable实现类的对象
Thread t = new Thread(run);// 创建Thread对象,并使用Runable实现类的对象作为参数
t.start();// Thread对象调用start方法,执行run方法,开启新线程
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName());// main线程
}
}
}
多线程Thread类的方法的更多相关文章
- 2.匿名类,匿名类对象,private/protected/public关键字、abstract抽象类,抽象方法、final关键字的使用,多线程Thread类start方法原理
package com.bawei.multithread; //注意:模板方法我们通常使用抽象类或者抽象方法!这里我们为了方便在本类中使用就没有使用抽象类/抽象方法 public class Tem ...
- 探Java多线程Thread类和Runnable接口之间的联系
首先复习一下Java多线程实现机制,Java实现多线程方法有如下这么几种: 1.继承了(extends)Thread类 2.实现了(implements)Runnable接口 也就是说 有如下两种情 ...
- 多线程----Thread类,Runnable接口,线程池,Callable接口,线程安全
1概念 1.1进程 进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 任务管理器中: 1.2线程 线程是进程中的一个执行单元 ...
- 多线程——Thread类
进程(Process):“正在执行的程序”,程序进入内存运行就变成了一个进程.一个进程会产生多个线程. 多线程(Multithread):一个进程中同时存在几个执行体.单线程是按照函数的顺序执行,多线 ...
- Java多线程Thread类了解和使用
创建线程的两种方式 extends Thread 类 public class WelComeApp { public static void main(String[] args) { Welcom ...
- 并发编程之 Thread 类过期方法和常用方法
前言 在 Java 刚诞生时,Thread 类就已经有了很多方法,但这些方法由于一些原因(有一些明显的bug或者设计不合理)有些已经废弃了,但是他们的方法名却是非常的好,真的是浪费.我们在进行并发必编 ...
- 多线程-----Thread类与Runnable接口的区别
第一个继承Thread类来实现多线程,其实是相当于拿出三件事即三个卖早餐10份的任务分别分给三个窗口,他们各做各的事各卖各的早餐各完成各的任务,因为MyThread继承Thread类,所以在newMy ...
- Java多线程学习笔记(一)——Thread类中方法介绍
currentThread():返回代码正在被哪个线程调用. public class CurrentThreadWay { public static void main(String[] args ...
- Java多线程系列二——Thread类的方法
Thread实现Runnable接口并实现了大量实用的方法 public static native void yield(); 此方法释放CPU,但并不释放已获得的锁,其它就绪的线程将可能得到执行机 ...
随机推荐
- windows下操作linux虚拟机映射网络驱动器中文件提示chmod权限不足解决方案
为了方便操作,linux虚拟机会通过windows下连接网络驱动器的方式共享自己的文件,对于前端来说,我想把gulp放在windows磁盘,操作虚拟机中的php文件,一来节省虚拟机磁盘大小,二来解决虚 ...
- 【HDU - 4342】History repeat itself(数学)
BUPT2017 wintertraining(15) #8C 题意 求第n(n<2^32)个非完全平方数m,以及\(\sum_{i=1}^m{\lfloor\sqrt i\rfloor}\) ...
- 【Tsinsen A1039】【bzoj2638】黑白染色 (BFS树)
Descroption 原题链接 你有一个\(n*m\)的矩形,一开始所有格子都是白色,然后给出一个目标状态的矩形,有的地方是白色,有的地方是黑色,你每次可以选择一个连通块(四连通块,且不要求颜色一样 ...
- BZOJ 2728: [HNOI2012]与非(位运算)
题意 定义 NAND(与非)运算,其运算结果为真当且仅当两个输入的布尔值不全为真,也就是 A NAND B = NOT(A AND B) ,运算位数不会超过 \(k\) 位, 给你 \(n\) 个整数 ...
- Vue中的计算属性与$watch
计算属性:在模板中绑定表达式是非常便利的,但是他们实际上只用于简单的操作.模板是为了描述视图的结构.在模板中放入太多的逻辑会让模板过重且难以维护.这就是为什么vue.js将绑定表达式限制为一个表达式. ...
- zookeeper部署
版本:zookeeper-3.4.5-cdh5.10.0.tar.gz 网址:http://archive-primary.cloudera.com/cdh5/cdh/5/ 1. 解压 $ tar - ...
- request.getRequestDispatcher 页面跳转,样式丢失。
在页面中引用样式和其它资源的时候,尽量不要用相对路径,因为"当前路径"这个概念在J2EE中是不稳定的. 所以最好都是绝对路径,类似于: <% String cp = requ ...
- Go实战--golang中使用JWT(JSON Web Token)
http://blog.csdn.net/wangshubo1989/article/details/74529333 之前写过关于golang中如何使用cookie的博客: 实战–go中使用cook ...
- Nlog 简单的快速攻略
废话不多说直接进入正题. 1.在项目中加入Nlog的应用 安装后会出现两个文件 2.我们打开Nlog.config配置文件设置日志记录 <?xml version="1.0" ...
- 用宏定义代替printf函数
来自:http://blog.csdn.net/yannanxiu/article/details/52506451 #define _DEBUG_ 1 #if _DEBUG_ #define PR( ...