多线程

2017-08-18  本文已影响0人  beatsl

多线程

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

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

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

线程:是程序的执行单元,执行路径。是程序使用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()

上一篇 下一篇

猜你喜欢

热点阅读