• 线程的创建和状态(操作系统和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
  • 相关阅读:
    redis 哨兵 sentinel(一)配置
    算法--分隔链表(Kotlin)
    1535_TriCore编译器Tasking使用_汇编分区、内置函数以及伪指令
    什么是HBase?终于有人讲明白了
    机器人科普--AGILOX 叉车
    【Leetcode】面试题 01.09. 字符串轮转
    Friend.tech(FT):社交媒体金融的未来,真的如此美好吗?
    数字孪生技术打造智慧矿山可视化解决方案
    Java————形参和实参
    【无标题】
  • 原文地址:https://blog.csdn.net/weixin_51423778/article/details/126394534