JavaSE-多线程知识

本文深入探讨JavaSE中的多线程技术,包括线程、进程与程序的区别,线程的创建方式,线程同步机制,死锁的概念及预防措施,线程池的工作原理等。适合初学者和有一定基础的开发者学习。

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

JavaSE-多线程知识

1.线程、进程、程序的区别

  • 程序是指令和数据的文件,被存储在磁盘或其它的数据存储设备中,也就是说程序是静态的代码。
  • 进程是程序的一次执行过程,是系统运行程序的基本单位,程序是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。
  • 线程是比进程还要小的运行单位。一个进程最少要有一个线程。线程和进程最大的不同在于各进程基本上是独立的,每个线程有自己的程序计数器、虚拟机栈和本地方法栈。而各线程则不一定,因为同类的多个线程共享进程的堆和方法区资源,所以会相互影响。
  • 进程有独立性和互斥性
    线程有抢占式资源共享特性

2.什么是并发和并行

  • 并发:同一时间片内轮流交替执行
  • 并行:同一时间片内同时执行

3.创建线程的两种方式【jdk1.5之前】

1.继承Thread类

class MyThread extends Thread{
   
   
	@Override
    public void run(){
   
   
        System.out.println("继承Thread类创建线程");
    }
}
public class Demo{
   
   
    public static void main(String[] args){
   
   
        new MyThread().start();
    }
}

2.实现Runnable接口

class MyThread implements Runnable{
   
   
	@Override
    public void run(){
   
   
        System.out.println("实现Runnable接口创建线程");
    }
}
public class Demo{
   
   
    public static void main(String[] args){
   
   
        new Thread(new Runnable()).start();
    }
}

3.匿名内部类

public class Demo{
   
   
	public static void mian(String[] args){
   
   
        //匿名内部类:继承Thread类创建线程
		new Thread(){
   
   
            @Override
    		public void run(){
   
   
        		System.out.println("匿名内部类:继承Thread类创建线程");
    		}
        }start();
        
        //匿名内部类:实现Runnable接口创建线程
        new Thread(new Runnable(){
   
   
            @Override
    		public void run(){
   
   
        		System.out.println("匿名内部类:实现Runnable接口创建线程");
    		}
        }).start();
	}
}

4.线程下面的方法

构造方法
Thread()分配一个新的Thread对象
Thread(Runnable target)分配一个新的Thread对象
Thread(Runnable target, String name)分配一个新的Thread对象,并起名字

线程方法
static Thread currentThread()返回对当前正在执行的线程对象的引用
String getName()返回此线程的名称
void setName()将此线程的名称更改为等于参数name
int getPriority()返回此线程的优先级
void setPriority()更改此线程的优先级。设置优先并不一定优先,只是增加了执行的概率。最小值是1,最大值是10,默认是5
static void sleep(long millis)使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行),具体取决于系统定时器和调度程序的精度和准确性
start()启动当前线程;调用当前线程的run()方法
run()通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中
yield():释放当前cpu的执行权
join():在线程a中调用线程b的join(),此时线程a就进入阻塞状态,直到线程b完全执行完以后,线程a才结束阻塞状态。      
join()方法:join()在线程a中调用线程b的join(),此时线程a就进入阻塞状态,直到线程b完全执行完以后,线程a才结束阻塞状态
class Father implements Runnable {
   
   

    @Ov
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值