多线程的简介及方法

来源:互联网 发布:上证综合指数季度数据 编辑:程序博客网 时间:2024/04/26 06:23

多线程

一、线程与进程

进程:进程是一个程序执行的过程,其本质是系统对程序的资源分配和调度的独立单位。

线程:即程序中执行的线程。进程中可以有多个线程,且一个程序中所有的线程共享其进程的所有资源。

 

二、多线程

多线程的含义:即一个程序包含多个线程,且并发执行。

多线程的优先级:每个线程都有优先级,优先级较高的线程优于优先级较低的线程执行。


2.1 为什么要使用多线程:

1. 使用多线程的程序可以同时执行多个线程,满足用户同一时间的不同需求。

2. 提高CPU的利用率。


2.2 多线程的劣势:

当程序访问量过大,即线程数过多时:

1. 线程数会占用内存,对内存造成一定压力。

2. 由于线程数之间共享资源,线程与线程有可能会相互造成影响。

3. 线程过多导致的控制不易,同时易产生BUG。


2.3 主线程

主线程是指JAVA文件启动时立即启动一个线程调用的main方法。、

特殊点:

1. 产生其它子线程的线程。

2. 通常在最后关闭。

 

三、多线程的实现

多线程有两种主要的方法来实现,即继承Thread类与实现Runnable接口。


3.1 Thread类

3.1.1 构造函数

8种构造函数,其中常用构造函数2种:

Thread(String name);

Thread(Tunnable target,String name);


3.1.2 常用方法

start()

让线程处于可允许状态

setPriorty(int newPriority)

设置优先级(1-10),默认为5

Join()

等待线程终止(抢占时间片)

yield()

线程礼让(静态方法),同优先级或更高

interrupt()

终止线程

isAlive()

是否处于活动状态

sleep(long millis)

休眠(静态方法)

sleep(long millis,int nanos)

注:线程阻塞,系统在此期间不启用

 

 

3.1.3 继承Thread 类

 

//定义

public class TestThread extends Thread{

public void run(){

System.out.println("这是在继承了Thread类的Test类中的方法");

}

}

 

//调用

public static void main(String[] args) {

TestThread t = new TestThread ();

t.run();

}

 

3.2 Runnable接口

3.2.1 Runnable接口的实例由线程执行,且需要重写run方法。

3.2.2 run() :当实现接口的对象Runnable被用来创建一个线程,启动线程使对象的run在独立执行的线程中调用的方法。

3.2.3 继承runnable接口并实现多线程

 

//定义

public class TestThread implements Runnable{

public void run(){

System.out.println("这是在实现了Runnable接口的Test类中的方法");

}

}

 

//调用

public static void main(String[] args) {

TestThread t = new TestThread ();  //创建对象

Thread th = new Thread(t);       //创建Thread对象,并传入继承了接口的类TestThread的对象

th.start();                     //开启线程

}

 

3.3 两种方法的区别

3.3.1 方法2有利于程序的扩展,避免了JAVA单继承的局限性。

3.3.2 共享资源时,方法1无法实现,方法2可以。

四、关键字synchronized()

同步锁,锁定一个方法或者执行语句,其只能同时由一个线程执行,此线程执行同步锁锁定的方法或者语句期间,其它线程无法执行此方法或者语句。

 

 

 

 

 

 

 

 

阅读全文
0 0
原创粉丝点击