zoukankan      html  css  js  c++  java
  • 线程浅析

    1.进程与线程

       一个进程包含多个线程。可以把进程当做一个应用程序。

       操作系统分配一段时间给一个进程,让CPU执行该进程。进程再将时间片段分割给各个线程

    2.创建线程(Thread)的方法

    //方法一
    Thread thread = new Thread(){
           @Override
        public void run() {
            // TODO Auto-generated method stub
            super.run();      //要写的代码
        } 
    };//创建Thread类,重写run方法
    thread.start()  //开启线程
    //方法二
    public class test {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            NewThread nt = new NewThread();
            Thread thread = new Thread(nt);//将该类放入Thread类中
            thread.start();//启动线程
        }
    }
    
    class NewThread implements Runnable{//创建一个继承Runnable接口的类
    
        @Override
        public void run() {
            // TODO Auto-generated method stub
            //要写的代码
        }
        
    }

    注:所以说Thread类自身继承了Runnable();

    3.线程的生命周期

    图解

    理解: 线程具有7种状态

             出生:在Thread运用start()方法之前都算出生状态                                         就绪:当start()方法完成之后线程处于就绪状态(等待执行)

             运行:操作系统分配时间,让线程进入cpu运行                                             

             产生阻塞的三种方法(也是三种状态):

             等待:利用thread1.wait()线程自动进入阻塞状态。

                     一种设置时常:thread1.wait(1000);//当过了1000毫秒后自动处于就绪状态

                     另一种不设市场:只能够其他线程利用thread1.notify()唤醒,否则将一直处于阻塞状态。

             睡眠:利用thread.sleep()进入睡眠状态。

                     必须设置时长,当时间过了自动进入就绪状态

             阻塞:当线程处于等待I/O的输入输出方可再次运行时,处于阻塞状态。等到输入输出完毕时候自动进入就绪状态。

             最后

             线程运行完之后处于死亡状态

    4.线程的优先级

        优先级高的线程先运行,低的后运行。

    thread.setPriority(int rank);//设置优先级
    
    thread.yield()//让比自己高优先级的线程先运行

    5.其他主要方法

    //join()方法 Thread thread1 = new Thread(){
       public void run (){
            thread2.join();  //thread2调用了join方法
       }  
    };
    
    Thread thread2 = new Thread(){
        public void run (){
            //
       }  
    }
    //所以thread1要等待thread2执行完毕才能执行

    6.线程同步  

      1.什么叫线程同步,为什么需要线程同步

         当多个线程同时修改或调用同一个资源的时候,可能会导致数据不一致的情况,为了防止这种情况。就需要当一个线程使用资源的时候,另一个线程需要等待前一个线程使用完成。

      2.线程锁

         将资源对象锁住,防止其他线程使用。

    //方法一
    Thread thread = new Thread(){
           @Override
        public void run() {
            // TODO Auto-generated method stub
           super.run();
        synchronized(){
               //锁住资源对象
          }
        }
    } 
    //方法二
    Thread thread = new Thread(){
           @Override
        public void run() {
            // TODO Auto-generated method stub
            super.run();
            use();
        }
    
        private synchronized  void use(){
           //锁住资源对象
        }  
    } 
    //所以说synchronized是一个修饰符

         

     7.小技巧

        1.如何控制线程死亡:

    boolean isDead = true;
    
    Thread thread = new Thread(){
           @Override
        public void run() {
            // TODO Auto-generated method stub
           super.run();
           while(isDead){
              if (...){
                 //... 
              }
              else{
                isDead = false;
              }
           }    
        }
    }        
  • 相关阅读:
    转载:SuperMap 网络带宽对B/S项目的影响有多大?如何计算所需要的带宽?
    转载:使用JWT做用户登陆token校验
    转载:互联网在线地图平台对比分析
    jmeter计时器讲解
    ReactNative setNativeProps
    关于xxx.h file not found 的问题
    注册推送通知
    ios ViewController present不同的方向
    ReactNative常见报错
    ios 后台模式
  • 原文地址:https://www.cnblogs.com/rookiechen/p/5236555.html
Copyright © 2011-2022 走看看