java多线程

  1. 多线程的实现方式有几种方法?
    1. 继承Thread类,用start方法启动线程
    2. 实现Runnable接口(多重继承中优先使用),用new Thread(Runnable target).start()方法来启动
  2. Thread.start()和Thead.run()的区别?
    1. start()方法(native)是用来调用启动线程的,使线程进入就绪状态。
    2. run()方法是用来线程的入口函数,当cpu分配时间给当前线程是,jvm调用该线程的run()方法。
  3. ThreadLocal类的使用?
    1. 定义:ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。
    2. 四个方法:
      1. void set(Object value)设置当前线程的线程局部变量的值。
      2. public Object get()该方法返回当前线程所对应的线程局部变量。
      3. public void remove()将当前线程局部变量的值删除,目的是为了减少内存的占用,该方法是JDK 5.0新增的方法。需要指出的是,当线程结束后,对应该线程的局部变量将自动被垃圾回收,所以显式调用该方法清除线程的局部变量并不是必须的操作,但它可以加快内存回收的速度。
      4. protected Object initialValue()返回该线程局部变量的初始值,该方法是一个protected的方法,显然是为了让子类覆盖而设计的。这个方法是一个延迟调用方法,在线程第1次调用get()或set(Object)时才执行,并且仅执行1次。ThreadLocal中的缺省实现直接返回一个null。
  4. sleep() 、suspend()和 wait() 有什么区别?
    1. sleep()不释放同步锁,wait()释放同步锁,因此wait(),notify()和notifyAll()只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用
    2. sleep(milliseconds)睡眠指定时间后自动醒过来,时间不到时,可以调用interreput()打断睡眠,而wait(milliseconds)/wait()后直到超时或者使用notify()/notifyAll()来唤醒
    3. sleep()是Thread类的方法,而wait()是Object类的方法
    4. sleep()是线程的运行状态,而wait()是线程之间的通讯
    5. sleep()必须捕获异常,而wait(),notify()和notifyAll()不需要捕获异常
  5. 多线程的同步?
    1. synchronized关键字,可以修饰函数或者代码块,当函数比较大的时候,应该用synchronized修饰代码块,因为加上synchronized时,代码执行效率会降低。
  6. 线程死锁的问题?怎么避免死锁?
    1. 死锁条件
      (1)互斥条件:一个资源每次只能被一个进程使用。
      (2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
      (3)不可剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
      (4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
    2. 避免死锁
      (1) 等待某个资源时,使用超时机制
      (2) 采用消息通信的通信机制,而不是共享内存的通信机制
  7. 多线程资源的共享和独享?
    1. 共享的:堆、全局变量、静态变量、文件等公共资源
    2. 独享的:栈、寄存器
  8. 线程的状态?状态:创建、就绪、运行、阻塞、死亡
  9. 线程池
    1. ThreadPoolExecutor类
    2. 线程池状态:
            volatile int runState;
            static final int RUNNING    = 0;
            static final int SHUTDOWN   = 1;
            static final int STOP       = 2;
            static final int TERMINATED = 3;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值