String getName()  返回该线程的名称。

void setName(String name)  改变线程名称,使之与参数 name 相同。

int getPriority()   返回线程的优先级。

void setPriority(int newPriority)   更改线程的优先级。

boolean isDaemon()   测试该线程是否为守护线程。

void setDaemon(boolean on)  将该线程标记为守护线程或用户线程。

static void sleep(long millis)

void interrupt()  中断线程。

static void yield()  暂停当前正在执行的线程对象,并执行其他线程。

void join()  等待该线程终止。

void run()

void start()

从Object类继承来的方法  void notify()         void wait()

sleep阻塞

Thread.sleep(times)使当前线程从Running状态放弃处理器进入Block状态,休眠times毫秒,再返回Runnable状态。

new Thread(new Runnable() {
@Override
public void run() {
SimpleDateFormat format=new SimpleDateFormat("hh:mm:ss");
//输出系统时间的时分秒。每隔一秒显示一次。可能会出现跳秒的情况,因为阻塞1秒过后进入runnable状态,等待分配时间片进入running状态后还需要一点时间
while(true){
try {
Thread.sleep(1000); } catch (InterruptedException e) {
e.printStackTrace(); }
System.out.println(format.format(new Date()));
}
}
}).start();

注意:当一个线程处于睡眠阻塞时,若被其他线程调用.interrupt方法中断,则sleep方法会抛出InterruptedException异常

public static void main(String[] args) {
/*
* 表演者:处于睡眠阻塞的线程。
* 当一个方法中的局部内部类中需要引用该方法的其他局部变量,那么这个变量必须是final的
*/
final Thread lin = new Thread() {
public void run() {
System.out.println("林:刚美完容,睡觉吧!");
try{
// 当一个线程处于睡眠阻塞时,若被其他线程调用interrupt()方法中断,则sleep()方法会抛出 InterruptedException异常
Thread.sleep(100000000);
}
catch(InterruptedException e){
System.out.println("林:干嘛呢!都破了相了!");
}
}
};
/*
* 表演者:中断睡眠阻塞的线程
*/
Thread huang = new Thread() {
public void run() {
System.out.println("黄:开始砸墙!");
for(int i = 0; i < 5; i++){
System.out.println("黄:80!");
try{
Thread.sleep(1000);
}
catch(InterruptedException e){
}
}
System.out.println("咣当!");
System.out.println("黄:搞定!"); // 中断lin的睡眠阻塞
lin.interrupt();
}
};
lin.start();
huang.start();
}

后台线程

后台线程的特点:用法与前台线程无异,只是当一个进程中所有前台线程都结束后,无论后台线程是否还处于运行中都将被强制结束,从而使得进程结束程序退出。

后台线程也称为:守护线程。精灵线程。

在运行程序时,操作系统会启动一个进程来运行jvm,jvm运行后会创建第一个前台线程来运行我们程序的main方法。同时也会创建一个后台线程运行GC。

public static void main(String[] args) {

        // Rose,表演者:前台线程
Thread rose = new Thread() {
public void run() {
for(int i = 0; i < 10; i++){
System.out.println("rose:let me go!");
try{
Thread.sleep(1000);
}
catch(InterruptedException e){
e.printStackTrace();
}
}
System.out.println("rose:啊啊啊啊AAAAAAaaaaaa....");
System.out.println("噗通!");
}
}; // jack,表演者:后台线程
Thread jack = new Thread() {
public void run() {
while(true){
System.out.println("jack:you jump!i jump!");
try{
Thread.sleep(1000);
}
catch(InterruptedException e){
e.printStackTrace();
}
}
}
}; /*
* 设置为后台线程
* 设置后台线程的方法要在该线程被调用start()方法之前调用
*/
jack.setDaemon(true);
rose.start();
jack.start();
}

线程的优先级

优先级被划分为1-10,1最低10最高。优先级越高的线程被分配时间片的机会越多,那么被CPU执行的机会就越多。

public static void main(String[] args) {
// 最高优先级的线程
Thread max = new Thread() {
public void run() {
for(int i = 0; i < 1000; i++){
System.out.println("max");
}
}
};
// 最低优先级的线程
Thread min = new Thread() {
public void run() {
for(int i = 0; i < 1000; i++){
System.out.println("min");
}
}
};
// 默认优先级的线程
Thread norm = new Thread() {
public void run() {
for(int i = 0; i < 1000; i++){
System.out.println("norm");
}
}
};
// void setPriority(int p),设置当前线程的优先级, 最高,最低,默认都有常量对应。
// 设置了优先级也不能100%控制线程调度。只是最大程度的告知线程调度以更多的几率分配时间片给线程优先级高的线程
max.setPriority(Thread.MAX_PRIORITY);
min.setPriority(Thread.MIN_PRIORITY);
// 这项设置可以省略,默认情况下就是该值
norm.setPriority(Thread.NORM_PRIORITY); min.start();
norm.start();
max.start();
}

join方法

/**
* 线程的协同工作 join方法
*/
public class Demo { // 判断照片是否下载完成
public static boolean isFinish = false; public static void main(String[] args) {
// 下载图片的线程
final Thread download = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("download:开始下载图片");
for(int i = 0; i <= 100; i++){
System.out.println("download:已完成" + i + "%");
try{
Thread.sleep(50);
}
catch(InterruptedException e){
e.printStackTrace();
}
}
System.out.println("download:图片下载完毕");
isFinish = true;
}
});
download.start(); // 用于显示图片的线程
Thread showImg = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("show:准备显示图片");
// 等待下载线程工作结束后,再执行下面的代码,
try{
// 此时显示图片的线程就进入阻塞状态,等待download线程运行结束,才能执行下面的代码。注意千万不要在永远也死不了的线程上等待
download.join();
}
catch(InterruptedException e){
e.printStackTrace();
}
if(!isFinish){
throw new RuntimeException("show:图片还没有下载完");
}
System.out.println("show:图片显示完成!");
}
});
showImg.start();
} }

wait()notify()方法

/**
* 使用wait()与notify()方法完成线程协同工作
*/
public class Demo { public static boolean isFinish = false;
public static Object object = new Object(); public static void main(String[] args) { // 下载图片的线程
final Thread download = new Thread() {
public void run() {
System.out.println("download:开始下载图片");
for(int i = 0; i <= 100; i++){
System.out.println("download:已完成" + i + "%");
try{
Thread.sleep(50);
}
catch(InterruptedException e){
}
}
System.out.println("download:图片下载完毕");
isFinish = true;// 表示图片下载完毕了 // 当图片下载完毕后,就可以通知showImg开始显示图片了
synchronized(object){
// 通知在object身上等待的线程解除等待阻塞
object.notify();
} System.out.println("download:开始下载附件");
for(int i = 0; i <= 100; i++){
System.out.println("download:已完成" + i + "%");
try{
Thread.sleep(50);
}
catch(InterruptedException e){
}
}
System.out.println("download:附件下载完毕");
} }; // 用于显示图片的线程
Thread showImg = new Thread() {
public void run() {
System.out.println("show:准备显示图片");
// 等待下载线程将图片下载结束后,再执行下面的代码
try{
// wait()阻塞会在以下两种情况被解除,1:当download线程结束. 2:当调用了download的notify()
synchronized(object){
object.wait();
}
}
catch(InterruptedException e){
e.printStackTrace();
}
if(!isFinish){
throw new RuntimeException("图片没有下载完毕");
}
System.out.println("show:图片已经显示了!");
}
}; download.start();
showImg.start();
}
}

Thread类的常用方法的更多相关文章

  1. 创建多线程的方式&Thread类的常用方法

    创建多线程的第一种方式:继承java.lang.Thread类 注意:1.一个线程只能执行一次start() 2.不能通过Thread实现类对象的 run()去启动一个线程 3.增加加一个线程,需要新 ...

  2. Thread类的常用方法_获取线程名称的方法和设置线程名称的方法

    Thread类的常用方法 获取线程的名称: 1.使用Thread类中的方法getName() String getName() 返回该线程的名称 2.可以先获取到当前正在执行的线程,使用线程中的方法g ...

  3. Thread类的常用方法----多线程基础练习

    创建多线程程序的第一种方式----继承Thread类 常用API 构造方法 public Thread() :分配一个新的线程对象. public Thread(String name) :分配一个指 ...

  4. Thread类的常用方法_获取线程名称的方法和Thread类的常用方法_设置线程名称的方法

    构造方法: public Thread();分配一个新的线程对象 public Thread(String name);分配一个指定名字的新的线程对象 public Thread(Runnable t ...

  5. Thread类的常用方法_sleep和创建多线程程序的第二种方式_实现Runnable接口

    sleep方法是在Thread类中的一个静态方法,当一个线程调用了sleep方法,被调用的那个线程就会暂时的让出指定时间的CPU执行权,在这段时间也不会参与CPU的调度,当时间到了之后,就会重新回到就 ...

  6. Thread类的常用方法_sleep和创建多线程程序的第二种方式实现Runnable接口

    public static void sleep(long millis);//使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行). 毫秒数结束后线程继续执行 package com.yang.T ...

  7. 34. Thread类的常用方法

    1.构造方法 Thread() 分配新的 Thread 对象. Thread(String name)  分配新的 Thread 对象并指定线程名字 2.方法 1)setName(String nam ...

  8. 线程操作之Thread类

    在.Net fremework 中,所有与线程有关的操作都封装在System.Thread命名空间中, 所以在操作线程时,要先引入次命名空间 Thread类的常用方法 Abort 线程终止 Join ...

  9. 【C#多线程】1.Thread类的使用及注意要点

    Thread随便讲讲 因为在C#中,Thread类在我们的新业务上并不常用了(因为创建一个新线程要比直接从线程池拿线程更加耗费资源),并且在.NET4.0后新增了Task类即Async与await关键 ...

随机推荐

  1. Qt—MVC架构

    [1]代理应用示例源码 用代码说事,比较靠谱. 代码目录:三个自定义类,重实现QStyledItemDelegate类.main函数应用示例. (1)ComboDelegate.h #ifndef C ...

  2. 写自动更新程序出现"远程服务器返回错误: (404) 未找到"

    在win2003配置后,在客户端运行时能够下载exe和dll文件,但是在更新lib文件时总是报“远程服务器返回错误: (404) 未找到”错误,不明白咋会出现这个问题,去网上一查,发现以下解决办法: ...

  3. c# 设置控件的前景颜色和背景颜色

    AutoSize:设置为false取消自动计算尺寸功能,控件的大小则按照设定的Size来呈现,设置为true自动计算大小 TextAlign:设置对齐方式 // // 摘要: // 用默认的所有者运行 ...

  4. Array和ArrayList不同

    Employee[] array = new Employee[10]; ArrayList<Employee> staff = new ArrayList<>(); 不同 A ...

  5. flask框架----上下文管理

    一.上下文管理相关知识点: a.类似于本地线程 创建Local类: { 线程或协程唯一标识: { 'stack':[request],'xxx':[session,] }, 线程或协程唯一标识: { ...

  6. kali linux中文输入法

    kali linux中文输入法 已经使用kali linux有一段时间来,越用越喜欢,真的奥! 最近又有宝宝问我kali linux的中文输入法,鉴于当初在坑里蹲了很长时间,还是记录一下吧! The ...

  7. DOS下读取smbios的汇编程序(通过搜索memory)

    汇编程序编写的读取smbios的代码: ;------------------------------------------------- ;功能: 读取SMBIOS 的Entry Point ,并 ...

  8. 如何最快速的找到页面某一元素所绑定的点击事件,并查看js代码

    https://blog.csdn.net/jmd88888888/article/details/70919378

  9. OL6.3 设置本地yum源

    仅在 Oracle Linux Server release 6.3 上测试 PS:Oracle Linux Server release 6.3仅用于测试,不能用于商业用途 [root@oracle ...

  10. window bat 运行 cmd 命令

    新建一个.bat批处理文件,编写以下切换目录 并且执行 ipconfig 命令: cmd /k "cd /d D:phpStudy/WWW & ipconfig" cmd ...