1.什么是多线程?
在一个进程中同时运行了多个线程,用来完成不同的工作,则称之为“多线程”,并且多个线程交替占用CPU资源,而非真正的并行执行,多线程的本质是抢CPU资源
2.在Java中创建线程的两种方法?
继承java.lang.Thread类
1.继承Thread类
2.重写run()方法
3.调用start()方法启动该线程
public class MyThread extends Thread{
//重写run()方法
public void run(){
for(int i=1;i<100;i++){ System.out.println(
Thread.currentThread().getName()+":"+i);
}}}
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start(); //启动线程
实现java.lang.Runnable接口
1.实现Runnable接口
2.实现run()方法,编写线程执行体
3.创建线程对象,调用start()方法启动线程
public class MyRunnable implements Runnable{
public void run(){
for(int i=1;i<100;i++){ System.out.println(
Thread.currentThread().getName()+":"+i);
}}}
public static void main(String[] args) {
MyRunnable myRunnable = new MyRunnable();
Thread myThread = new Thread(myRunnable);
thread.start(); //启动线程}
3.操作线程的步骤?
4.直接调用run()和start()区别接调用run()和start()区别 ?
5.比较两种创建线程的方式?
继承
Thread
类
编写简单,可直接操作线程
适用于单继承
实现
Runnable
接口
避免单继承局限性
便于共享资源
6.线程的五个状态?
7.线程的优先级?
从1-10,1最低,默认5,优先级高低表示抢占CPU概率的大小
8.线程礼让?
暂停当前线程,允许其他具有相同优先级的线程获得运行机会,只是提供一次同时抢资源的机会,自己也参与抢夺
9.线程上锁--synchronized关键字
访问修饰符 synchronized 返回类型 方法名(参数列表){……}
使用synchronized关键字修饰的代码块
synchronized(syncObject){
//需要同步的代码
}
解决:多个并发线程访问同一资源的同步代码块时?
- 同一时刻只能有一个线程进入synchronized(this)同步代码块
- 当一个线程访问一个synchronized(this)同步代码块时,其他synchronized(this)同步代码块同样被锁定
- 当一个线程访问一个synchronized(this)同步代码块时,其他线程可以访问该资源的非synchronized(this)同步代码
10.线程安全的类型
方法是否同步 | 效率比较 | 适合场景 | |
线程安全 | 是 | 低 | 多线程并发共享资源 |
非线程安全 | 否 | 高 | 单线程 |