java基础第十八天 多线程

来源:互联网 发布:java md5解密密码 编辑:程序博客网 时间:2024/05/19 03:30

1、多线程
程序:就是用某种编程语言编写的能够执行特定功能的代码,是静态
进程:就是执行中的程序,是动态,进程拥有计算机分配的独立的资源(cpu,内存,网络)
线程:是程序执行的路径,如果一个进程里只有一个执行路径,叫单线程
如果一个进程里有多个执行路径,叫多线程

jvm是多线程还是单线程?
答案是:多线程
因为虚拟机启动时,需要同时启动垃圾回收线程,否则会产生内存溢出错误
2、线程的创建和启动
2.1 继承Thread
线程的创建与启动方式1:
创建线程:
class 类名 extends Thread

实现线程方法体
@Override
void run()

是因为不是所有的方法,都用来执行多线程程序,run方法提供一个实现入口,run方法是有虚拟机调用
线程启动
start();

2.2 实现Runnable
线程的创建与启动方式2:
创建线程:
class MyRunnable implements Runnable

实现线程方法体
@Override
void run()

线程启动
Thread thread = new Thread(new MyRunnable());
thread.start();

使用继承Thread和实现Runnable区别:
继承Thread: 线程代码存放Thread子类run方法中。
实现Runnable:线程代码存在接口的子类的run方法。

使用实现Runnable的好处:
1、打破单继承的局限性
2、多个线程可以共享同一个接口实现类的对象,非常适合多个相同线程来处理同一份资源。

3、线程的常用方法
3.1设置线程的优先级别
线程的优先级别:

MAX_PRIORITY(10);    MIN _PRIORITY (1);  NORM_PRIORITY (5);

线程级别范围:1-10,超出这个范围,运行时会拋异常
默认级别:5,就是不设置的时候,默认是这个级别

设置优先级别的方法:

getPriority() :返回线程优先值
setPriority(int newPriority) :改变线程的优先级

3.2线程休眠
线程休眠:

static void sleep(long millis)
在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。

特点:

指定时间段内放弃对CPU控制,使其他线程有机会被执行需要处理中断异常InterruptedException

3.3线程加入
线程加入:

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

例如:
Thread thread01 = new ThreadJoin();
Thread thread02 = new ThreadJoin();

System.out.println("调用thread02线程的join方法开始,主线程会阻塞,开始只i系那个thread02的线程方法");try {    thread02.join();} catch (InterruptedException e) {    e.printStackTrace();}System.out.println("直到thread02执行完毕以后才会执行该代码,因为主线程调用thread02线程的join方法,被阻塞");

3.4线程让步
线程让步:
static void yield() 暂停当前正在执行的线程对象,并执行其他线程。

若优先级不一样,高的先执行

若优先级一样,会继续抢cpu执行权
3.5线程停止
线程停止:
@Deprecated 过时方法,不建议使用
public final void stop()

建议使用:
public void interrupt() 中断线程。

4、线程的分类
线程分为:
用户线程
守护线程

特点:
1、守护线程是用来服务用户线程的,
2、通过在start()方法前调用thread.setDaemon(true)

注意:一个进程里面,不能都是守护线程

原创粉丝点击