多线程开发

4.多线程开发-线程的基本API

2020-07-29  本文已影响0人  还算年轻

1.多线程的使用

常见的创建方法:

        1.1.extends Thread  继承Thread类,重写run方法

        1.2.implement Runnable实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target

        1.3.通过Callable和FutureTask创建线程

        1.4.通过线程池创建线程,实现线程池的复用,减少每次创建线程的开销。

注:线程的使用需要特别注意的:

线程的随意性:调用start的顺讯不能够说明执行的顺序(随意性或者说不确定性)

2.多线程共享变量与非共享变量两种运行方式(是否操作同一资源,大部分都是操作同一资源)

       2.1.共享变量  包括堆中的实例变量(class 中的实例变量),方法区中的类变量(静态变量)

       2.2.方法中的局部变量存储在栈帧中的局部变量表,是线程私有的空间,不存在共享的问题。

3.线程常用方法篇:

      3.1获取当前代码对应的线程Thread.currentThread().getName()    thread.setName()

      3.2判断线程是否准备执行or正在执行isAlive()  ,thread.start()调用start会使线程进入准备,待cpu分片后才执行。

      3.3.线程sleep多少毫秒,thread.sleep(1000),不会影响其他线程。

      3.4.线程调用sleep会进入阻塞态,不会释放锁,等到阻塞时间结束,进入就绪态。

      3.5.获取线程的id thread.getId()

      3.6.停止线程:

            3.6.1.thread.interupt()//给thread对应的线程打上线程停止的标识,需要逻辑停止,比如说 异常法。

            3.6.2.thread.stop()//强制停止,已经废弃掉了

        3.7.线程暂停和恢复thread.suspend & thread.resume。

              缺点:线程独占、共享变量数据不一致。

       3.8.线程放弃当前CPU

             thread.yield()//线程放弃当前正在执行的机会,让个同等或更高优先级的线程,会释放锁。

       3.9.线程的优先级

            thread.getPrority();

            thread.setPrority(1-10);

            cpu优先执行优先级高的线程,优先级高的线程得的的资源多。

      3.10.守护线程  thread.setDaemon();

      3.11.非线程安全

            多线程对共享变量(类变量,成员变量,同一张表的同一行记录,同一文件的记录)修改造成其他线程脏读,数据不一致问题。

      比如说system.out.println(i++); i++操作非原子性,像ACID一样。造成脏读/幻读/不可重复等问题、

           1.取原值

           2.计算i+1

           3.对原值赋值

       解决方案:

           加锁,对对象(加锁sychronized对对象)or代码函数加锁,加锁的区域成为互斥区or临界区,线程只能以排队的方式来执行,进而不会出现不一致等问题。

           注意:提升线程的执行效率是避免锁的使用。通过逻辑上避免对同一资源的访问,为什么加锁会变慢??

          线程要执行加锁的同步方法时,会尝试获取锁,如果拿不到,会进入锁池状态不断尝试拿锁,会大量进行上下问切换,浪费资源

     3.12.异步相关:

           Callable、Future和FutureTask

           Callable:异步执行任务接口。

               Callable位于java.util.concurrent包下,它也是一个接口,在它里面也只声明了一个方法,只不过这个方法叫做call():

           Future:

                  Future就是对于具体的Runnable或者Callable任务的执行结果进行取消、查询是否完成、获取结果。必要时可以通过get方法获取执行结果,该方法会阻塞直到任务返回结果。

上一篇下一篇

猜你喜欢

热点阅读