栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java多线程

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java多线程

多线程

        进程和线程                 一个进程包含多个线程                 是按照进程分配资源 java中创建线程的问题:         方式一:
            多线程中,代码的编写顺序和执行顺序没有关系
            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将线程设置成后台线程

        

设置线程的优先级(注意登记高是有可能先执行而不是一定)
序号定义描述表示的常量
1public static final int MIN_PRIORITUY最低优先级1
2public static final int NORM_PRIORITY中等优先级,是线程的默认优先级5
3public 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();

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/978630.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号