多线程

作者: beatsl | 来源:发表于2017-08-18 21:18 被阅读0次

    多线程

    多线程概述:进程,线程。

    进程:正在运行的程序。是系统进行资源分配和调用的独立单位。每一个进程都有它自己的内存空间和系统资源

    多进程有什么意义:单进程计算机只能做一个事情,一边玩游戏和听音乐

    线程:是程序的执行单元,执行路径。是程序使用CPU的基本单位;

    多线程有什么意义

    不是提高程序的执行速度。其实是为了提高应用程序的使用率,线程的执行有随机性

    并行和并发:前者逻辑上同时发生,指某一个时间断内同时运行多个程序;

                            后者                                                        点                                    。

    Java程序运行原理:由java命名启动JVM,JVM启动就相当于启动一个进程,接着有该进程创建了一个主线程去调用main方法。

    多线程实现:

    方式1:继承Thread类

    步骤

    A:自定义类MyThread继承Thread类

    B:MyThread类里面重写run()

    C:创建对象

    d:启动线程

    d:启动方式调用start()方法:启动+运行一次run()有且只能调用一次。

    获取线程名称:

    public final String getName();

    设置线程名称:

    public final void setName(String name); PS:跟自定义类一样

    获取当前线程名称:

    public ststic Thread currentThread();

    Thread currentThread.getname();

    线程调度:分时调度(平分时间),抢占式调度模型(按优先级)。

    Java用抢占式:

    public final int getPriority();返回线程优先级:

    注意:默认优先级5

    设置优先级:

    public final void setPriority():修改优先级

    优先级范围1-10;越大越好几率越高

    线程休眠:

    public static void sleep(long millis)暂停millis毫秒

    线程假如:

    public final void join()等待该线程终止

    线程暂停:

    public static void yield():暂停当前执行的线程对象,并执行其他线程,让执行看起来很和谐

    后台线程:

    public final void setDeamon(boolean on)设置守护线程,该线程走完其他线程都结束,必须在启动前调用(死前可以板俩下)

    中断线程:

    public final void stop()让线程停止,过时了

    public void interrupt()中断线程,把线程状态终止并抛出一个InterruptedException.

    线程生命周期:

    新建--就绪--运行--死亡

    阻塞--就绪--运行--死亡

    多线程实现方案2:实现Runnable接口

    步骤: A:自定义MyRunnable师兄Runnable接口

    B:重写run方法

    C:创建MyRunnable类的对象

    D:创建Thread类的对象,并把C步骤的对象作为构造参数传递

    解决单继承的局限性,适合多个相同程序的代码去处理同一个资源的情况,把线程同程序的代码,数据有效分离,较好的提醒了面向对象的思想

    同步代码块:

    synchronized(对象){

    需要同步的代码

    另一个锁:Lock(接口)

    获取锁:

    public void lock()

    释放锁:

    public void unlock()

    实现类ReentrantLock;

    死锁问题:

    同步:效率低,嵌套时候容易产生死锁

    死锁:指俩个或者俩个以上的线程在争夺资源的过程中,发生的一种相互等待的现象。

    解决:线程间通信问题:不同种类的线程间针对同一个资源的操作

    生存者消费者同一把锁

    public void wait();等待

    notify();唤醒单个线程

    notifyAll();所有

    线程组:使用ThreadGroup

    public final ThreadGroup getThreadGroup();

    public final String getname();

    线程池:Executors工厂类.

    public static ExecutService newCacherThreadPool():

    FixedThreadPool(int nThreads);创建几个线程

    SingleThreadExecutor();

    结束线程池:

    shutdown();

    匿名内部类多线程使用:new Thread(){public void run(){}}.start();

    了解:

    定时器:定期执行程序

    Timer(定时)和TimerTask(任务)类

    public Timer()

    public void schedule(TimeTask task,long delay)

    (                        ,long period)

    cancel()

    相关文章

      网友评论

          本文标题:多线程

          本文链接:https://www.haomeiwen.com/subject/vbhzrxtx.html