• 线程的创建和状态(操作系统和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
  • 相关阅读:
    6 Hive引擎集成Apache Paimon
    web前端期末大作业:网站设计与实现——咖啡网站HTML+CSS+JavaScript
    微信小程序开发之图片压缩方案
    macOS Monterey12.5.1 配置vim
    MySQL 8.0 架构 之 通用查询日志(General Query Log)
    StarkWare:欲构建ZK“宇宙”
    mysql存储地理信息的方法
    【微软技术栈】C#.NET 内存映射文件
    Django——模板层、模型层
    4、FFmpeg命令行操作3
  • 原文地址:https://blog.csdn.net/weixin_51423778/article/details/126394534