Java的多线程

基本概念:

        在Java中,多线程是一种并发编程的机制,它允许同时执行多个线程的代码片段,

1.线程:解释了线程的定义和特点,以及与进程的区别。

2.并发和并行:展示并发和并行的区别,说明多线程如何实现并发执行。

3.线程调度与生命周期:介绍线程调度器以及线程的各种状态,如新建状态、就绪状态、运行状态、阻塞状态和终止状态。

创建线程:

了解如何在Java中创建线程是入门多线程编程的第一步。以下是两种常用的创建线程的方法:

1.继承Thread类:创建一个继承自Thread的子类,并重写其中的run()方法。

class MyThread extends Thread {
    public void run() {
        // 线程执行的逻辑
    }
}

// 创建并启动线程
MyThread thread = new MyThread();
thread.start();

2.实现Runnable接口:实现Runnable接口,并将其对象作为参数传递给Thread类的构造函数。

class MyRunnable implements Runnable {
    public void run() {
        // 线程执行的逻辑
    }
}

// 创建并启动线程
Thread thread = new Thread(new MyRunnable());
thread.start();

启动线程:

启动线程的过程非常简单,只需调用线程对象的start()方法。

Thread thread = new Thread(new MyRunnable());
thread.start();

在调用start()方法后,线程将开始执行,并自动调用run()方法。

线程同步:

当多个线程访问共享资源时,可能会出现数据不一致或冲突的问题。了解线程同步和互斥是确保多线程程序正确运行的关键。

1.同步代码块:使用synchronized关键字对需要同步访问的代码进行包围。

synchronized (object) {
    // 需要同步的代码
}

2.同步方法:使用synchronized关键字修饰方法,使整个方法成为同步代码块

public synchronized void myMethod() {
    // 需要同步的代码
}

基本方法:

1.start():启动线程。当调用该方法时,线程将开始执行,并自动调用线程对象的 run() 方法。

public class ThreadDemo {
    public static void main(String[] args) {
        MyThread t1 =new MyThread("a");
        MyThread t2 =new MyThread("b");
        t1.start();
        t2.start();

    }
}

2.run():线程的执行逻辑。在该方法中定义线程要执行的操作。需要注意的是,直接调用 run() 方法将会以普通的方法调用方式执行,并不会启动新的线程。

3.sleep(long millis):使线程休眠指定的时间,以毫秒为单位。该方法会让当前线程暂停执行,但不会释放占用的资源,指定的休眠时间过后,线程会继续执行。

public class MyThread implements Runnable {
    @Override
        public void run() {
             try {
                   Thread.sleep(100);
                 } catch (InterruptedException e) {
                      e.printStackTrace();
                  }
        }    
}

4.join():等待线程终止。调用该方法的线程将会进入阻塞状态,直到被调用的线程执行完毕。可以使用带参数的 join(long millis) 方法来指定最长等待时间。

public class ThreadDemo {
    public static void main(String[] args) throws InterruptedException {
        /*
        public final void join() 插入线程/插队线程
         */

        MyThread t =new MyThread();
        t.setName("a");
        t.start();

        t.join();

        for (int i = 0; i < 10; i++) {
            System.out.println("main线程"+"  "+i);
        }
    }
}

5.yield():暂停当前线程的执行,让系统调度器选择其他线程执行。该方法的使用可以让同优先级的线程有机会执行,但并不能保证起到绝对的作用。

public class MyThread extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(getName() + "    "+i);
            //表示出让当前cpu的控制权
            Thread.yield();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值