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

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

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

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

                                                         

                                                           

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

                                                            

认识线程 概念

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

优点

可以实现并发编程。

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

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

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

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

进程和线程的区别

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

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

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

线程的创建
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 方法,在对象的监视器上等待。

   每日一图

 

 

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

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

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