java学习笔记----多线程

本文介绍了Java中创建线程的两种方式:继承Thread类并重写run方法,及实现Runnable接口并重写run方法。此外,还讲解了线程的状态、优先级设置、守护线程的概念以及线程同步机制,包括synchronized关键字的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线程的创建

方式一:
Thread+重写run方法

public class ThreadTest01 extends Thread{
@Override
public void run (){
for(int i = 0;i<200000;i++){
System.out.println("一边听歌");
	}
}

public static void main(String[]args){
ThreadTest01 st = new ThreadTest01();
st.start();//不保证立即运行,有CPU调用。
for(int i = 0;i<200000;i++){
System.out.println("一边coding");
		}
	}
}

方式二:

/**
* 创建线程方式二:
* 创建:实现Runnable接口+重写run
* 启动:创建子对象+start
* 推荐:避免单继承的局限性;优先使用接口
* 方便共享资源
*/
public class ThreadTest02 implements Runnable{
@Override
public void run (){
for(int i = 0;i<200000;i++){
System.out.println("一边听歌");
	}
}
public static void main(String[]args){
//创建实现类对象
ThreadTest02 sr = new ThreadTest02();
//创建代理类对象
Thread t = new Thread(sr);
//启动
t.start();//不保证立即运行,有CPU调用。
for(int i = 0;i<200000;i++){
System.out.println("一边coding");
		}
	}
}

线程状态

在这里插入图片描述

多线程的相关函数

1、获取线程当前状态函数

Thread.State state = t.getState(); //有NEW,RUNNABLE,TERMINATE值

2、线程优先级函数

/**
* 线程优先级1-10
* 默认优先级NORM_PRIORITY;-----5
* 最高优先级MAX_PRIORITY;-----10
* 最低优先级MIN_PRIORITY;-------1
*/
t1.setPriority(Thread.MAX_PRIORITY);
Thread.currentThread().getPriority()//当前线程的优先级
  • 注意:优先级高表示调用的概率大,并不代表绝对的先后顺序。要先设置优先级然后开始线程。

3、守护线程函数

/*
守护线程:是为用户线程服务的,jvm不用等待守护线程执行完毕
默认:jvm会等守护线程执行完毕;
*/
god.setDaemon(true);//设置god的线程为守护线程,须为true,默认为false;
god.start();

线程同步机制

由于我们可以通过private关键字来保证数据对象只能被方法访问,所以我们只需针对方法提出一套机制,这套机制就是synchronized关键字。他包括两种用法:synchronized方法(同步方法)和synchronized块。

方式一:同步代码块
synchronized(同步监视器){
		需要被同步的代码
}
  • 说明:
    1.需要同步的代码不能过多。
    2.同步监视器:俗称锁,多个线程必须要共用一把锁。
    3.在实现Runnable接口创建多线程的方式中。我们可以考虑使用this充当同步监视器。在继承thread类创建多线程的方式中,慎用this充当同步监视器,考虑使用当前类充当同步监视器。
方式二:同步方法
public synchronized void method (int args){}
  • 说明:
    该方法一旦执行,该线程就独占该锁,直到从该方法返回时才将锁释放,此后被阻塞的线程方能获得该锁,方能进入该方法。
    若将一个大的方法声明为synchronized将会大大影响效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值