zoukankan      html  css  js  c++  java
  • JAVA 线程

    1,线程基础

    1,继承Thread方式的线程

    • 当需要再此启动一个线程时,需要再创建对象,不能重复使用。

    2,推荐的创建线程方式:继承Runnalbe,使用Thread类

    • 1.5之前就这两种

    • callable 第三种

      • 可以有返回值 call()

      • 可以抛出异常

      • 支持泛型返回值

      • 需要借助FutureTask, 如获取返回值的时候

      • class MyThread implements Callable{
            public Object call() throws Exception{
                ....
                return null;
            }
        }
        
        MyThread thread = new MyThread();
        FutureTask f = new FutureTask(thread);
        new Thread(f).start();
        try{
            Object ret = f.get();// get()为返回值
        }catch(InterruptedException){
            
        }catch(Execution e){
            
        }
        
    • 线程池 第四种方式

      • 提高速度,降低资源消耗
      • 便于线程管理:核心池大小,最大线程数,没任务多长时间终止
      //Executors 工具类
      //ExecutorService 接口
      ExecutorService service = Executors.newFixedThreadPool(10);
      ThreadPoolExecutor executor = (ThreadPoolExecutor)service;
      executor.setxxx() //设置参数
      service.execute(Runnable);
      service.submit(Callable);
      service.shutdown();
      

    3,Thread常用方法

    getPriority() setPrioority(1,5,10)
    currentThread() 静态方法 getName() setName()
    yield() 释放cup执行权,变为就绪状态 join():在A线程中B.join() ,A就阻塞,B执行完到A
    stop() :过时方法,强制结束线程 sleep(ms) isAlive()

    4,线程分类

    守护线程,用户线程

    守护线程服务用户线程

    thread.setDaemon(true) //设置为守护线程
    
    • 最简单程序main主线程与gc回收线程
    • 若没有用户线程jvm则结束

    5,线程生命周期

    • NEW : 创建对象
    • RUNNABLE :运行 start
    • BLOCKED:阻塞 sleep,join,等待同步锁,wait,suspend:过时方法
    • WAITING:wait()
    • TIMED-WAITING:wait(time)
    • TERMINATED:stop,exception,run结束

    阻塞---》就绪:sleep,join结束获取同步锁,notify,resume:过时方法

    6,注意

    • wait:阻塞,会释放锁,必须在synchronized内
    • sleep:阻塞,不会释放锁,任何时候可以

    wait,notify,notifyall,必须在同步方法快内,方法内,不能使用lock,他们调用时是锁对象.wait,要注意 此时syn(锁对象),两个所对象必须相同

    2,线程同步

    • 同步代码块

      • 要求所有相乘同一把锁 synchronized(obj) obj是同一个对象,或同一个类
    • 同步方法:当方法内容全部需要同步时

      • 非静态方法锁即时this 需要注意
      • 静态方法时,锁时当前类本身
    • Lock :接口 1.5之后

      • 能够手动开启同步,结束同步

      • ReentrantLock lock = new ReentrantLock();
        try{
           lock.lock();
               ...
        }finally{
            lock.unlock();
        }
        
  • 相关阅读:
    jsp转向
    什么是 XDoclet?
    tomcat中的几点配置说明
    mysql5问题
    POJ 3734 Blocks
    POJ 2409 Let it Bead
    HDU 1171 Big Event in HDU
    POJ 3046 Ant Counting
    HDU 2082 找单词
    POJ 1286 Necklace of Beads
  • 原文地址:https://www.cnblogs.com/Dean0731/p/12363755.html
Copyright © 2011-2022 走看看