java面试--多线程,同步问题

java面试–多线程,同步问题

相关概念:

1)程序:安装在磁盘上的一段指令集合,它是静态的概念。
2)进程:它是运行中的程序,它是动态的概念。每个进程有独立的资源空间
3)线程:轻量级的进程,是程序执行的最小单元,是程序中一个单一的顺序控制流程。线程是进程中的一个实体,是被系统独立调度和分派的基本单位。
4)多线程:指在单个程序中可以同时运行多个线程执行不同的任务。

多线程优势

  1. 减少程序的响应时间;
  2. 与进程相比,线程的创建和切换开销更小;
  3. 在数据共享方面效率很高;
  4. 多CPU或多核计算及本身就具有执行多线程的能力,如果使用单线程,将无法充分利用计算机资源,造成资源的巨大浪费;
  5. 使用多线程能够简化程序结构,使程序便于理解和维护。

创建多线程的主要方法

  1. 继承Thread类,重写run方法
    1)定义Thread类的子类,并重写该类的run()方法,该方法的方法体就是线程需要完成的任务,run()方法也称为线程执行体;
    2)创建Thread子类的实例,也就是创建了线程对象;
    3)启动线程,即调用线程的start()方法。

代码:

class MyThread extends Thread{
   public void run(){
       System.out.println("Thread body");
   }
 }
 public class Test{
   public static void main(String[] args){
      MyThread thread=new MyThread();
      thread.start();//开启线程
   }
 }
  1. 实现Runnable接口,并实现该接口的run方法
    1)定义Runnable接口的实现类,一样要重写run()方法,这个run()方法和Thread中的run()方法一样是线程的执行体;
    2)创建Thread对象,用实现Runnable接口的对象作为参数实例化该Thread对象;
    3)通过调用线程对象的start()方法来启动线程。
class MyThread implements Runnable{
   public void run(){
      System.out.println("Thread body");
   }
 }
 public class Test{
    public static void main(String[] args){
       MyThread thread=new MyThread();
       Thread t=new Thread(thread);
       t.start();
    }
  }

上述第二种方法较为常用,可以避免单继承的局限性,因为一个类可以实现多个接口,但只能继承一个类;同时第二种方法更适合资源的共享。

线程同步

  1. 为什么需要同步:
    防止多个线程访问一个数据对象时,对数据造成破坏;
    可以保证多线程安全访问竞争资源。

  2. 如何实现同步
    一个对象只有一个锁,所以一个线程获得该锁,就没有其线程可以获得锁,直到第一个线程释放锁。这意味着任何其他线程都不能进入synchronized方法或代码块,直到该锁被释放,释放锁代表着持锁线程推出了synchronized同步方法或代码块。

发布了1 篇原创文章 · 获赞 1 · 访问量 19

猜你喜欢

转载自blog.csdn.net/weixin_43736524/article/details/104483835