什么是线程?

本文详细介绍了Java线程的六种状态,包括新建、运行、阻塞、等待、计时等待和终止,并通过示例代码展示了线程状态的转换。此外,还讨论了线程的优先级和守护线程的概念,指出高优先级线程优先执行,非守护线程在Java虚拟机关闭前不会结束。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线程:

Thread类中有这样的明确定义:线程是程序中执行的线程 ,Java虚拟机允许程序同时运行多个执行线程

  • .1. 线程有6 种状态: :新建,运行(可运行),阻塞,等待,计时等待和终止。
  • 新建:当使用new操作符创建新线程时,线程处于“新建“状态
  • 运行(可运行):调用start()方法
  • 阻塞:当线程需要获得对象的内置锁,而该锁正在被其他线程拥有
  • 等待:当线程等待其他线程通知调度表可以运行时
  • 计时等待:对于一些含有时间参数的方法,如Thread类的sleep()
  • 终止:当run()方法运行完毕或出现异常时
  •  

1)查看运行状态:Thread类的getState()方法 1)编写类ThreadState,实现Runnable接口

public class ThreadState implements Runnable {
public synchronized void waitForASecond() throws InterruptedException
    { wait(500);//将当前线程暂时等待0.5秒或其他线程调用notify()或notifyAll()
}
public synchronized void waitForLong() throws InterruptedException
    { wait();//永久等待,直到其他线程调用notify()或notifyAll()
}
public synchronized void notifyNow() throws InterruptedException
    { notify();//唤醒由调用wait()方法进入等待状态的线程
}
@Override
public void run()
{ try {
waitForASecond();//在新线程中运行waitForASecond()方法
waitForLong();//在新线程中运行waitForLong()
    } catch (InterruptedException e)
    { e.printStackTrace();
        }
    }
}

2)测试类:ThreadTest
 

public class ThreadTest{
public static void main(String[] args) throws InterruptedException
    { ThreadState state=new ThreadState();
Thread thread=new Thread(state);//创建Thread对象
System.out.println("新建线程:"+thread.getState());
thread.start();
System.out.println(" 启 动 线 程 :"+thread.getState());
Thread.sleep(100);//当前线程休眠,时新线程运行waitForASecond()方法
System.out.println(" 计 时 等 待 :"+thread.getState());
Thread.sleep(1000);//当前线程休眠,时新线程运行waitForLong()方法
System.out.println(" 等 待 线 程 :"+thread.getState());
state.notifyNow();
System.out.println("唤醒线程:"+thread.getState());
Thread.sleep(1000);//当前线程休眠,时新线程结束
System.out.println("终止线程:"+thread.getState());
    }
}

运行结果:

 2.Java中每个线程都有优先级属性,具有较高优先级的线程优先于优先级较低的线程执行,每个线程可能也可能不会被标记为守护进程。当在某个线程中运行创建一个新的 Thread对象时,新的线程的优先级最初设置为等于创建线程的优先级,并且当且仅当创建线程是守护进程时才是守护进程线程。 (线程的优先级用数字来表示,范围从 1~10,主线程的默认优先级为5 : Thread.MAX_PRIORITY=10 ; Thread.NORM_PRIORITY=5)

当Java虚拟机启动时,通常会有一个非守护程序线程(通常调用某个指定类的名为 main的方法)Java虚拟机继续执行线程直到发生以下任一情况:已调用类 Runtime的exit方法,并且安全管理器已允许执行退出操作。所有非守护程序线程的线程都已经死亡,要么通过调用返回run方法,要么抛出一个超出run方法传播的异常。

线程与进程?:进程是CPU,内存等资源占用的基本单位,线程是不能独立占有这些资源的;进程之间相互独立,通信比较困难,线程之间共享一块内存区域,通信方便Thread.MIN_PRIORITY=1 ;
 

以上是让总结的知识点:

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值