• 线程的创建和状态(操作系统和java)


    线程的创建方式

    继承Thread
    	class MyThread extends Thread {
    		@Override
    		public void run() {
    		}
    	}
    	MyThread t = new MyThread();
    	t.start()
    
    	实现Runnable接口 推荐
    	class MyRunnable implements Runnable {
    		@Override
    		public void run() {
    		}
    	}
    
    	MyRunnable my = new MyRunnable();
    	Thread t = new Thread(my);
    	t.start()
    
    	匿名内部类方式操作
    	new Thread(new Runnable() {
    		@Override
    		public void run() {
    		}
    	});
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    线程的状态

    操作系统层面 5种状态
    新建 就绪 运行 终止 阻塞

    Java里面 6种状态
    新建状态: new 创建线程对象
    可运行状态:start()方法,进入可运行状态,线程可能开始运行,也可能没有运行
    刚start() ,线程相当于先进入就绪状态,获取cpu资源,进入运行状态
    cpu时间片到期,yield() 线程回到就绪状态
    阻塞状态:通过同步方法、同步代码块对象程序加锁,其他线程访问已加锁的代码时,进入阻塞状态
    当线程释放锁,阻塞的线程进入可运行状态,哪个线程抢到cpu资源,该线程执行相关程序,并继续加锁
    等待状态:线程中调用wait()/join()等方法,线程进入等待状态
    其他线程通过notify()唤醒等待的线程,或者join的线程执行完毕,线程线程进入可运行状态
    计时等待状态:sleep(long)/wait(long)/join(long) 进入计时等待状态
    终止状态:run方法正常执行完毕,或者报异常


    线程的调度


    sleep() 哪个线程调用sleep方法,哪个线程就休眠
    join() 线程插队 ,插队的线程先执行完,其他的线程才会继续执行
    yield()线程礼让 哪个线程中调用yield方法,哪个线程进入就绪状态
    
    • 1
    • 2
    • 3

    线程同步
    针对线程安全:多个线程访问共享的数据
    同步机制
    同步方法 synchronized 修饰方法
    同步代码块
    synchronized(锁对象) {
    需要同步执行的代码
    }
    锁对象必须唯一,相当于多个线程共享一把锁

    单例设计模式
    整个程序中,如果某个类的对象只需要一个,这个时候就可以使用单例模式
    懒汉式
    饿汉式 推荐

    注意:构造方法需要设置为private
    
    • 1
  • 相关阅读:
    【HCIP】OSPF 外部路由引入
    lua-快速入门学习
    电脑重装系统打印机脱机状态怎么恢复正常
    【编程英语】Python常用英语单词
    java计算机毕业设计花田音乐网站MyBatis+系统+LW文档+源码+调试部署
    戏说领域驱动设计(七)——限界上下文——延伸
    比nestjs更优雅的ioc:跨模块访问资源
    机器学习初学者不可错过的ModelScope开源模型社区
    文心一言 VS 讯飞星火 VS chatgpt (114)-- 算法导论10.2 7题
    selenium判断元素可点击、可见、可选
  • 原文地址:https://blog.csdn.net/weixin_51423778/article/details/126394534