java基础第十八天 多线程
2017-08-23 08:51
183 查看
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设置线程的优先级别
线程的优先级别:
线程级别范围:1-10,超出这个范围,运行时会拋异常
默认级别:5,就是不设置的时候,默认是这个级别
设置优先级别的方法:
getPriority() :返回线程优先值
setPriority(int newPriority) :改变线程的优先级
3.2线程休眠
线程休眠:
static void sleep(long millis)
在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。
特点:
3.3线程加入
线程加入:
public final void join() throws InterruptedException等待该线程终止。
例如:
Thread thread01 = new ThreadJoin();
Thread thread02 = new ThreadJoin();
3.4线程让步
线程让步:
static void yield() 暂停当前正在执行的线程对象,并执行其他线程。
若优先级不一样,高的先执行
若优先级一样,会继续抢cpu执行权
3.5线程停止
线程停止:
@Deprecated 过时方法,不建议使用
public final void stop()
建议使用:
public void interrupt() 中断线程。
4、线程的分类
线程分为:
用户线程
守护线程
特点:
1、守护线程是用来服务用户线程的,
2、通过在start()方法前调用thread.setDaemon(true)
注意:一个进程里面,不能都是守护线程
程序:就是用某种编程语言编写的能够执行特定功能的代码,是静态
进程:就是执行中的程序,是动态,进程拥有计算机分配的独立的资源(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)
注意:一个进程里面,不能都是守护线程
相关文章推荐
- java多线程基础知识点总结
- 黑马程序员--java基础--多线程
- 黑马程序员-JAVA基础-多线程(上)
- Java多线程基础之对象锁的同步与异步
- 基础知识《五》---Java多线程的常见陷阱
- 黑马程序员.Android攻城狮.JAVA基础.1.5.Java多线程
- Java多线程基础:进程和线程之由来
- Java多线程基础
- 黑马程序员——Java基础---传统多线程
- Java基础学习——简介Java多线程
- 黑马程序员—————Java基础--------多线程
- Java多线程编程总结笔记——02多线程基础知识
- Java基础-->多线程
- 黑马程序员_Java基础_多线程1
- Java多线程基础(一)
- Java基础---第十一天 多线程
- java 多线程系列基础篇(八)之join()、start()、run()方法
- Java基础----一个有问题的多线程程序
- Java基础笔记之多线程
- JAVA多线程和并发基础面试问答