多线程(线程的状态、终止、休眠、礼让、合并)
2021-01-06 18:29
标签:run jdk ack out 主线程 time while mem 创建 1、线程状态 2、线程的终止 不推荐使用JDK提供的stop方法、destory方法,他们已经被废弃,这里使用标志位来终止线程 线程被终止之后,只有主线程在运行 3、线程的休眠 需要指定当前线程阻塞的毫秒数,时间到达之后就进入就绪状态,可以模拟网络延时、倒计时等。每一个对象都有一把锁,sleep不会释放锁 (1)模拟网络延时: 如果不添加延时的代码,就会被第1个线程全部取走,当然,这个程序也体现了,在多个线程操作同一个数据的时候,存在线程安全的问题。 (2)模拟倒计时 主线程每隔一秒钟调用一次run方法,参数为一千毫秒,也就是一秒钟 (3)读取系统时间 主线程每隔一秒钟读取一次系统时间,是通过调用run方法实现的 4、线程礼让 让当前正在执行的线程暂停,但不阻塞,将线程从运行状态,变为就绪状态,让CPU重新调度,礼让不一定成功 5、合并线程 待其它线程执行完成后,再执行调用JOIN方法的线程,此线程阻塞 测试: 当组线程执行到200的时候,主线程被阻塞,开始执行定义的VIP线程,直到VIP线程执行完毕,再开始执行主线程 6、线程的状态 测试: 多线程(线程的状态、终止、休眠、礼让、合并) 标签:run jdk ack out 主线程 time while mem 创建 原文地址:https://www.cnblogs.com/zhai1997/p/12971575.htmlpublic class TestStop implements Runnable {
private boolean flag=true;
@Override
public void run() {
int i=0;
while(flag){
System.out.println("Thread"+i++);
}
}
public void stop(){
this.flag=false;
System.out.println("线程停止了!!");
}
public static void main(String[] args) {
TestStop testStop=new TestStop();
new Thread(testStop).start();
for(int i=0;i){
System.out.println("main"+i);//主线程循环到800的时候,让创建的线程停止
if(i==900){
testStop.stop();
}
}
}
}
public class TestSleep implements Runnable{
private int ticketsNums=10;
@Override
public void run() {
while(true){
if(ticketsNums){
break;
}
try {
Thread.sleep(200);//延时200ms
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread()+"拿到了"+ticketsNums--+"张票");
}
}
public static void main(String[] args) {
TestSleep testThread=new TestSleep();
new Thread(testThread,"zhai").start();
new Thread(testThread,"zhang").start();
new Thread(testThread,"liu").start();
}
}
public class TestSleep implements Runnable{
@Override
public void run() {
int num=10;
while(true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(num--);
if(num){
break;
}
}
}
public static void main(String[] args) {
TestSleep testSleep=new TestSleep();
testSleep.run();
}
}
public class TestSleep implements Runnable{
@Override
public void run() {
Date startTime=null;
while (true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
startTime=new Date(System.currentTimeMillis());
System.out.println(new SimpleDateFormat("HH:mm:ss").format(startTime));
}
}
public static void main(String[] args) {
TestSleep testSleep=new TestSleep();
testSleep.run();
}
}
public class TestYield implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"线程开始执行");
Thread.yield();
System.out.println(Thread.currentThread().getName()+"线程停止执行");
}
public static void main(String[] args) {
TestYield testYield=new TestYield();
new Thread(testYield,"a").start();
new Thread(testYield,"b").start();
}
}
a线程开始执行
b线程开始执行
a线程停止执行
b线程停止执行
public class JoinTest implements Runnable {
@Override
public void run() {
for(int i=0;i){
System.out.println("线程VIP来了");
}
}
public static void main(String[] args) {
JoinTest joinTest=new JoinTest();
Thread thread=new Thread(joinTest);
thread.start();
for(int i=0;i){
if(i==200){
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("main-----"+i);
}
}
}
main-----194
main-----195
main-----196
main-----197
main-----198
main-----199
线程VIP来了
线程VIP来了
线程VIP来了
线程VIP来了
线程VIP来了
线程VIP来了
public class StateTest implements Runnable {
@Override
public void run() {
}
public static void main(String[] args) {
Thread thread = new Thread(() -> {
for (int i = 1; i ) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("---------------");
});
Thread.State state = thread.getState();
System.out.println(state);
thread.start();
state = thread.getState();
System.out.println(state);
while (state!=Thread.State.TERMINATED){//只要线程不终止,就一直输出线程的状态
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
state=thread.getState();
System.out.println(state);
}
}
}
NEW
RUNNABLE
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
---------------
TERMINATED
下一篇:php数组
文章标题:多线程(线程的状态、终止、休眠、礼让、合并)
文章链接:http://soscw.com/index.php/essay/40532.html