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同步方法或代码块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值