想进大厂?这些多线程的知识你应该知道

想进大厂?这些多线程的知识你应该知道,第1张

                                                         

                                                           

                              大家好,我是爱动漫更爱编程的小工同学~

                                                            

认识线程 概念

一个线程就是一个"执行流",每个线程之间都可以按照顺序执行自己的代码,多个线程之间“同时”执行者多份代码。

优点

可以实现并发编程。

虽然多线程也能实现 并发编程 但是线程比进程更轻量

创建线程比创建进程更快。

销毁线程毕晓辉进程更快。

调度线程比调度进程更快。

进程和线程的区别

进程是包含线程的,每一个进程至少有一个存在,即主线程。

进程和进程之间不共享内存空间,同一个进程的线程之间共享同一个内存空间

进程是系统分配资源的最小单位,线程是系统调度的最小单位。

线程的创建
1、继承Thread类,重写run方法
​
public class MyThread {
    public static class  cc extends Thread
    {
        @Override
        public void run() {
           System.out.println("hello java");
        }
    }
    public static void main(String[]args)
    {
        cc t=new cc();
        t.run();
    }
}

​
2、实现Runnable接口,重写run方法

public class MyThread {
    public static class cc implements Runnable
    {

        @Override
        public void run() {
            System.out.println("hello Java");
        }
    }
    public static void main(String[] args)
    {
      new Thread(new cc()).start();
    }
}
3、使用匿名内部类创建子类对象
// 使用匿名类创建 Thread子类对象

Thread t1 = new Thread(){ 
       @Override 
       public void run() {
       System.out.println("使用匿名类创建 Thread 子类对象"); 
}
});

//使用匿名类创建 Runnable子类对象
     Thread t2 = new Thread(new Runnable() { 
       @Override 
        public void run() { 
        System.out.println("使用匿名类创建 Runnable 子类对象"); 
} 
});
Thread和Runnable的区别

如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。

总结:

实现Runnable接口比继承Thread类所具有的优势:

1):适合多个相同的程序代码的线程去处理同一个资源

2):可以避免java中的单继承的限制

3):增加程序的健壮性,代码可以被多个线程共享,代码和数据独立

4):线程池只能放入实现Runable或callable类线程,不能直接放入继承Thread的类
 

补充:start()作用是把线程加入到就绪队列中,等待被调度器选中才能执行。

线程的优先级

 Thread类中设置和获取线程优先级的方法

1、public final getPriority()返回线程的优先级

2、public fina voidsetPriority(int newPriority 更改此线程的优先级

             线程默认优先级是5,线程优先级范围为:1--10

             线程优先级高仅代表线程获取CPU时间片的几率高

线程的分类

Java中的线程分为两类:1、守护线程(垃圾回收线程,异常处理线程)2、用户线程(主线程)

用户线程:主要负责交互工作

守护线程:负责支持工作

如果守护线程全部退出,JVM也退出

线程的生命周期

常用的线程方法

sleep()

它不能改变对象的锁。所以当在一个Synchronized方法中调用sleep()时,线程虽然休眠了,但是对象的机锁没有被释放,其他线程仍然无法访问这个对象。

1、主要作用让当前线程休眠,休眠时间结束后会自动醒来进入就绪状态

2、sleep()方法没有释放锁,其他线程

3、sleep()必须捕获异常

4、sleep可以在任何地方使用

wait()

会在线程休眠的同时释放掉机锁,其他线程可以访问该对象。    

1、属于Object,一旦一个对象调用了wait()方法,必须要采用notify和notifyAll()方法唤醒该进程。

2、wait()释放了锁。

3、wait()不需要捕获异常

4、wait(),notify()和notyfyAll智能在同步控制方法或者同步控制块里面使用。

yield()

停止当前进程,让同等优先权的线程运行,如果没有同等优先权的线程,那么yield()方法将不会起作用

join()

等待一个线程完成它的工作后,才能进行下一个线程的 *** 作

notify

唤醒再次对象监视器上的等待的单个线程,如果所有线程都在等待,则随机选一个线程

notifyAll()

唤醒在此对象监视器上等待的所有线程。线程通过调用其中一个 wait 方法,在对象的监视器上等待。

   🚀每日一图

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/742796.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存