多线程

多线程

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

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 2,503评论 1 15
  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 2,987评论 1 18
  • 线程概述 线程与进程 进程  每个运行中的任务(通常是程序)就是一个进程。当一个程序进入内存运行时,即变成了一个进...
    闽越布衣阅读 1,020评论 1 7
  • 该文章转自:http://blog.csdn.net/evankaka/article/details/44153...
    加来依蓝阅读 7,381评论 3 87
  • 不久前在某艺术学院附近的西餐厅吃饭,那天温暖的冬日阳光透过透明的玻璃打在身上,很是惬意。等待的时候,我端着柠檬水四...
    Joyna_Lin阅读 806评论 0 1