线程的基本概念
2020-06-09 09:46:01   0  举报             
     
         
 AI智能生成
  线程的基本概念
    作者其他创作
 大纲/内容
  什么叫做线程    
     程序里不同的执行路径就叫做一个线程  
     创建线程    
     class MyThread extends Thread    
     new MyThread()  
     class MyRunnable implements Runnable
    
     new Thread(new MyRunnable())
  
     MyCall implements Callable
    
     new Thread(new FutureTask<String>(new MyCall()))  
     new Thread(() -> {
System.out.println("Hello lambda!");
})
    System.out.println("Hello lambda!");
})
 final ExecutorService executor = Executors.newCachedThreadPool();
executor.execute(() -> {
System.out.println("Hello ThreadPool");
});
executor.shutdown();
    executor.execute(() -> {
System.out.println("Hello ThreadPool");
});
executor.shutdown();
 线程的方法    
     sleep()
    
     当前线程暂停一段时间让给别的线程去运行,sleep的线程等睡眠到规定的时间自动复活  
     yield()    
     当前线程暂停一段时间让给别的线程去运行,sleep的线程等睡眠到规定的时间自动复活
  
     join()    
     在自己当前线程加入你调用join的线程,本线程等待,等调用的线程运行完了,自己再去执行  
     线程状态    
      Thread t = new MyThread();    
     new 状态  
     t.start();    
     runnable  状态  
      t.join();    
     join 执行完后,是 timenated  状态  
     synchronized    
     同步方法和非同步方法可以一起调用  
     只对写方法加锁,对读方法不加锁,会导致脏读,因为synchronized方法与非synchronized方法是同时运行的。解决方案:在get方法也加上synchronized
  
     可重入锁    
     一个同步方法调用另一个同步方法,有一个方法加了锁,另一个也加了锁,  
     加的是同一把锁也是同一个线程,那这个时候申请仍然会得到该对象的锁  
     异常锁    
     程序在执行过程中,如果出现异常,默认锁会被释放
  
     在并发处理的过程中,有异常要多加小心,不然可能会发生不一致的情况。在第一个线程中抛出异常,其它线程会进入同步代码区,有可能会访问到异常产生时的数据,此要非常小心的处理同步业务逻辑中的异常
  
     锁升级    
     1.偏向锁    
     记录这个线程的ID  
     会在锁对象的头上面 markdown 记录这个线程  
     2.自旋锁    
     偏向锁如果有线程争用,就升级为自旋锁  
     3.重量级锁    
     会去操作系统申请资源  
     自旋锁转圈十次后  
     大于5个线程在自旋  
    
 
 
 
 
  0 条评论
 下一页
  
   
   
   
   
  
  
  
  
  
  
  
  
  
  
 