侧边栏壁纸
博主头像
三生石博主等级

梦想还是有的,就算做咸鱼,也要做最咸的。|

  • 累计撰写 39 篇文章
  • 累计创建 65 个标签
  • 累计收到 10 条评论

如何使用多线程?

三生石
2022-07-07 / 3 评论 / 0 点赞 / 883 阅读 / 2,225 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-07-07,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

多线程

Java创建线程的两种方式

继承java.lang.Thread类
  1. 定义MyThread类继承Thread类
  2. 重写run()方法,编写线程执行体
  3. 创建线程对象,调用start()方法启动线程
public class MyThread extends Thread(){
	//重写run方法
	public void run(){
		//执行方法体	
	}
}
public Static void main(String[] ages){
	MyThread t1 = new MyThread();
	t1.start();		//启动线程
}
实现java.lang.Runnable接口
  1. 定义MyRunnable类实现Runnable接口
  2. 实现run()方法,编写线程执行体
  3. 创建线程对象,调用start()方法启动线程
public class MyThread implements Runnable(){
	//重写run方法
	public void run(){
		//执行方法体	
	}
}
public Static void main(String[] ages){
	MyThread t1 = new MyThread();
    Thread myThread = new Thread(t1);
	myThread.start();		//启动线程
}

继承Thread类(1、编写简单,可直接操作线程。 2、适用于单继承)

实现Runnable(1、避免单继承的局限性。2、便于共享资源)

推荐使用实现Runnable接口方式创建线程

线程生命周期

1617777380004

线程优先级setPriority

void setPriority(int newPriority)	//更改线程的优先级
  • 线程优先级由1~10表示,1最低,默认优先级为5
  • 优先级高的线程获得CPU资源的概率较大
public static void main(String[] args){
	//创建线程对象并指定线程名
	Thread t1 = new Thread(new MyThread(),"线程A")	
	Thread t2 = new Thread(new MyThread(),"线程B");
	//两个线程对象分别设置为最高优先级和最低优先级
	t1.setPriority(Thread.MAX_PRIORITY);
	t2.setPriority(Thread.MIN_PRIORITY);
}

线程休眠sleep

static void sleep(long millis)		//在指定的毫秒数内让当前正在执行的线程休眠
//millis为休眠时间,以毫秒为单位,调用sleep()方法需要处理InterruptedException异常
  • 让线程暂时睡眠指定时长,线程进入阻塞状态
  • 睡眠时间过后线程会再进入可运行状态
public class ThreadTest {
    public static void main(String[] args) {
        //  获得当前线程
        Thread thread = Thread.currentThread();
        System.out.println("当前线程的名字是"+thread.getName());
        try {
            System.out.println("线程睡眠");
            //  线程睡眠    单位是毫秒
            Thread.sleep(5000);
            System.out.println("线程睡眠完成,本次睡眠五秒。");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

线程的强制运行join

  • 使当前线程暂停执行,等待其他线程结束后再继续执行本线程
public final void join()
public final void join(long mills)
public final void join(long mills,int nanos)
//millis:以毫秒为单位的等待时常 nanos:要等待的附加纳秒时常
//需处理InterruptedException异常

currentThread() 返回当前正在执行的线程对象的引用

setPriority() 设置线程优先级

线程中断

  • interrupt(),在一个线程中调用另一个线程的interrupt()方法,即会向那个线程发出信号——线程中断状态已被设置。至于那个线程何去何从,由具体的代码实现决定。
  • isInterrupted(),用来判断当前线程的中断状态(true or false)。
  • interrupted()是个Thread的static方法,用来恢复中断状态。

同步方法

使用synchronized修饰的方法控制对类成员变量的访问

synchronized就是为当前的线程声明一把锁

//访问修饰符 synchronized 返回类型 方法名 (参数列表){······}
//或者
//synchronized 访问修饰符 返回类型 方法名 (参数列表){······}

多个并发线程访问同一资源的同步代码块时

  • 同一时刻只能有一个线程进入synchronized(this)同步代码块
  • 当一个线程访问一个synchronized(this)同步代码块时,其他synchronized(this)同步代码块同样被锁定
  • 当一个线程访问一个synchronized(this)同步代码块时,其他线程可以访问该资源的非synchronized(this)同步代码

线程安全

方法是否同步效率比较适合场景
线程安全多线程并发共享资源
非线程安全单线程
0

评论区