JAVASE之多线程初识

来源:互联网 发布:五轴编程招聘 编辑:程序博客网 时间:2024/05/18 00:54

多线程:

进程:进程指正在运行的程序,确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能.

线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程.一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序.

 

简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程.

多线程:即就是一个程序中有多个线程在同时执行.

 

 

Thread

Thread是程序中的执行线程.java虚拟机允许应用程序并发运行多个执行线程.

Thread类的构造方法:

Thread();分配新的Thread对象

Thread(String name):分配新的Thread对象.将指定的name作为其线程名称.

 

常用方法:

Void start();使该线程开始执行;java虚拟机调用该线程的run方法.

Void run();该线程要执行的操作:如循环100次打印变量的值

Static void sleep(long millis):在指定的毫秒数内让当前正在执行的线程休眠(暂停执)

 

创建线程的步骤:

1,定义一个类继承Thread

2,重写run方法

3,创建子类对象,就是创建线程对象.

4,调用start()方法,开启线程并让线程执行,同时还会告诉jvm去调用run方法.

 

创建多线程的方式一:

一种是将类声明为Thread的子类,该子类应重写Thread类的run方法.接下来可以分配并启动该子类的实例.

Thread

String getName();返回该线程的名称.

Void setName(String name):改变线程名称,使之与参数name相同.

CPU执行程序的随机性.

 

实现线程二:实现Runnable接口

创建线程的另一种方法是声明实现Runnable接口的类,该类然后实现run方法.

然后创建Runnable的子类对象,传入到某个线程的构造方法中,开启线程.

然后创建Runnable的子类对象,传入到某个线程的构造方法中,开启线程。

为何要实现Runnable接口,Runable是啥玩意呢?继续API搜索。

查看Runnable接口说明文档:Runnable接口用来指定每个线程要执行的任务。包含了一个 run 的无参数抽象方法,需要由接口实现类重写该方法。

Void run();使用实现接口Runnable的对象创建一个线程时,启动该线程将导致在独立执行的线程中调用对象的run方法.

构造方法:

Thread(Runnable target):分配的Target对象,以使target作为其运行对象.

Thread(Runable target,String name):分配新的Thread对象,以便将target作为其运行对象,将指定的name作为其名称.

创建线程的步骤:

1. 定义类实现Runnable接口

2. 覆盖借口中的run方法

3. 创建Thread类的对象

4. Runable接口的子类对象作为参数传递给Thread类的构造函数.

5. 调用Thread类的start方法开启线程.

同步锁:

问题出现的原因:

要有多个线程

要有被多个线程所共享的数据

多个线程并发的访问共享的数据.

Synchronized:同步(),可以修饰代码块和方法,被修饰的代码块和方法一旦被某个线程访问,则直接锁住,其他的线程将无法访问.

 

同步代码块:

Synchronized(锁对象){

}

注意:锁对象需要被所有的线程共享.

 

同步:安全性高,效率低.

非同步:效率高,但是安全性低.

 

 

同步方法:使用关键字synchronized修饰的方法,一旦被一个线程访问,则整个方法全部锁住,其他线程则无法访问.

注意:

非静态同步方法的锁对象是this

静态的同步方法的锁对象是当前类的字节码对象.

 

线程的生命周期:

就是一个对象的初始化到消失

 

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

新建(创建线程对象)---就绪(具备了执行条件和没有具备执行权利两种状态)----运行(具备了执行条件,具备了执行权利)----死亡(线程对象变成了垃圾.)

 

 

原创粉丝点击