多线程中,代码的编写顺序和执行顺序没有关系
java程序运行至少有两个线程,分别是mian线程和垃圾回收线程
要数据静态化才能数据共享
public static void main(String[] args) {
Test t1 = new Test("haoren");
t1.start();
Test t2 = new Test("huairen");
t2.start();
}
class Test extends Thread{
private String name;
public Test(String name){
this.name = name;
}
public void run(){
for(int i=0;i<10;i++){
System.out.println(name+":"+i);
}
}
}
方式二:
多个线程中跑的是同一个对象实例,可以天然实现数据共享
实现Runnable
两种方式的优缺点:方式二可以天然实现数据共享,方式一要数据静态化才能数据共享
多线程编程中严禁强制死亡,正确的死亡方式:通过标志位的放式让其正常结束
//th1.stop();
线程的各种状态
1.创建状态
在程序中用构造方法创建了一个线程对象后,新的线程对象便处于新建状态,此时,它已经有了相应的内存空间和其他资源,但还处于不可运行状态。新建一个线程对象可采用Thread类的构造方法来实现,例如“Thread thread—new Thread();”。
2-就绪状态
新建线程对象后,调用该线程的start0方法就可以启动线程。当线程启动时,线程进入就绪状态。此时,线程将进入线程队列排队,等待CPU 服务,这表明它已经具备了运行条件。
3.运行状态
当就绪状态的线程被调用并获得处理器资源时,线程就进入了运行状态。此时,自动调用该线程对象的run()方法。run()方法定义了该线程的操作和功能。
4.堵塞状态
一个正在执行的线程在某些特殊情况下,如被人为挂起或需要执行耗时的输入/输出操作时,将让出 CPU 并暂时中止自己的执行,进入堵塞状态。在可执行状态下,如果调用sleep()、suspend()、wait()等方法。线程都将进入堵塞状态。堵塞时,线程不能进入排队队列,只有当引起堵塞的原因被消除后,线程才可以转入就绪状态。
5死亡状态
线程调用stop()方法时或run()方法执行结束后,即处于死亡状态。处于死亡状态的线程不具有维续运行的能力。
sleep方法需要指定睡眠时间,单位是毫秒
一个特殊的状态:就绪。具备了执行资格,但是还没有获取资源
线程的常用方法isAlive()判断线程是否处于活动状态
sleep(long millis)线程休眠
join()强制执行线程
interrupt()中断线程的某种状态
setDemo将线程设置成后台线程
设置线程的优先级(注意登记高是有可能先执行而不是一定)
| 序号 | 定义 | 描述 | 表示的常量 |
| 1 | public static final int MIN_PRIORITUY | 最低优先级 | 1 |
| 2 | public static final int NORM_PRIORITY | 中等优先级,是线程的默认优先级 | 5 |
| 3 | public static final int MAX_PRIORITY | 最高优先级 | 10 |
setPriority(主函数的级别为NORM_PRIORITY即为5)
Thread t1 = new Thread(new TestDemo5(),"线程a"); Thread t2 = new Thread(new TestDemo5(),"线程b"); Thread t3 = new Thread(new TestDemo5(),"线程c"); t1.setPriority(Thread.MIN_PRIORITY); t2.setPriority(Thread.MAX_PRIORITY); t3.setPriority(Thread.NORM_PRIORITY); t1.start(); t2.start(); t3.start();



