• java笔记关于多线程状态的理解和应用


    关于多线程的状态

     --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3890266.html  "谢谢--

    线程共有6种状态:
    1.新建线程---使用new来新建一个线程
    2.运行线程---调用start()方法,线程处于运行或可运行状态
    3.线程阻塞---线程需要获得内置锁,当该锁被其他线程使用时,此线程处于阻塞状态
    4.线程等待---当线程等待其他线程通知调度表可以运行时,此时线程处于等待状态
    5.线程计时等待---当线程调用含有时间参数的方法(如sleep())时,线程可进入计时等待状态
    6.终止线程--当线程的run()方法结束或者出现异常时,线程处于终止状态

    注意:在写多线程程序时,要时刻注意线程的状态,不同状态下,线程能够执行的任务是不同的
    使用Thread类的getState()方法可以获取到线程的状态,该方法的返回值是Thread.State,
    它是线程状态类的枚举。如下表:
    枚举常量 含义
    NEW 新建状态
    RUNNABLE 运行(可运行)状态
    BLOCKED 阻塞状态
    TIMED_WAITING 休眠状态
    WAITING 等待状态
    TERMINATED 终止状态

    常用方法:
    wait(): 让线程等待
    notify():唤醒一个线程
    notifyAll():唤醒所有线程
    sleep():让线程休眠
    interrupt():中断线程
    yield():暂停当前线程执行其他线程

    代码例子:
    实现并输出当前线程的状态:

    package com.xhj.thread;

    /**
    * 获取线程状态
    *
    * @author XIEHEJUN
    *
    */
    public class ThreadState implements Runnable {
    public synchronized void waitForASecond() throws InterruptedException {
    wait(500);
    }

    public synchronized void waiting() throws InterruptedException {
    wait();
    }

    public synchronized void notifyNow() throws InterruptedException {
    notify();
    }

    @Override
    public void run() {
    try {
    waitForASecond();
    waiting();
    } catch (Exception e) {
    System.out.println(e.getMessage());
    }
    }

    public static void main(String[] args) throws InterruptedException {
    ThreadState state = new ThreadState();
    Thread thread = new Thread(state);
    System.out.println("新建线程:" + thread.getState());
    thread.start();
    System.out.println("线程运行:" + thread.getState());
    Thread.sleep(100);
    System.out.println("计时等待线程:" + thread.getState());
    Thread.sleep(1000);
    System.out.println("等待线程:" + thread.getState());
    state.notifyNow();
    System.out.println("唤醒线程:" + thread.getState());
    Thread.sleep(1000);
    System.out.println("终止线程:" + thread.getState());
    }

    }


  • 相关阅读:
    docker学习1--dockerfile
    关于java php go 中AES加解密秘钥长度问题
    API设计中响应数据格式用json的优点
    mac air中编译安装swoole
    跟踪填写表单重复信息
    JS简单实现点赞操作
    JS验证码生成(入门级别)
    注册页面(入门)
    登录表单(入门简单)
    简单的UDP编程1
  • 原文地址:https://www.cnblogs.com/XHJT/p/3890266.html
Copyright © 2020-2023  润新知