多线程

多线程
执行时候每次顺序都不一样。
创建多线程三种方法:
1.extends Thread类,重写它的run()
这个run()方法就是线程执行体,就是该线程将要做的事。

2.implements Runnable接口,重写它的run()方法,
需要把Runnable对象包装成Thread对象后在执行start(),因为Runnable接口没有start()方法

3.实现Callable接口(就是Runnable增强版)
重写call()方法(有返回值。可以声明抛出异常)
先把Callable包装成Runnable再包装成Thread
New-Runnable-Running-Blocked-Dead
sleep()是进入阻塞Blocked状态;yield()是进入就绪Runnable状态。
sleep yield区别:
sleep暂停后不管优先级 其他线程随机执行,yield后只会给优先级相同或更高的线程执行机会。
sleep后进入阻塞,就过阻塞时间后转入就绪,而yield直接进入就绪,可能刚调用yield就再次获得执行机会。
sleep抛出InterruptedException,yield么有。
建议用sleep
后台线程:Daemon Thread,如果所有前台线程都死亡了,则后台线程自动死亡
主线程不能被设置成守护线程。setDaemon(true)

public class DaemonThread extends Thread
{
// 定义后台线程的线程执行体与普通线程没有任何区别
public void run()
{
for (int i = 0; i < 1000 ; i++ )
{
System.out.println(getName() + " " + i);
}
}
public static void main(String[] args)
{
DaemonThread t = new DaemonThread();
// 将此线程设置成后台线程
t.setDaemon(true); //这里设置成守护线程,当主线程结束之后 jvm中只有守护线程在继续,所以就直接结束。
// 启动后台线程
t.start();
for (int i = 0 ; i < 10 ; i++ )
{
System.out.println(Thread.currentThread().getName()+ " " + i);
}
// -----程序执行到此处,前台线程(main线程)结束------
// 后台线程也应该随之结束
}
}

import java.util.*;
public class SleepTest
{
public static void main(String[] args) throws Exception
{
for (int i = 0; i < 10 ; i++ )
{
System.out.println("当前时间: " + new Date());
// 调用sleep方法让当前线程暂停1s。
Thread.sleep(1000); //如果不设置sleep时间就嗖的一下都执行完了
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值