多线程

多线程

概念

单线程:同时只能执行一个任务

多线程:同时可以执行多个任务

并行:多个事件在同一时间,同时执行

并发:多个事件在同一时刻,交替执行

进程的特性:

  • 独立性:进程之间相互独立,各自占据内存空间
  • 动态性:进程动态的占据内存空间,cpu,网络等资源
  • 并发性:多个进程一起竞争cpu来运行自己

关系:

线程是进程的执行单元

抢占cpu的是进程中的线程

线程抢占到CPU资源才能运行代码

多线程运行原理

CPU在多个线程间快速切换,造成"同时"运行的假象。

多线程的实现方式

  • 继承Thread类的方式
  • 实现Runnable接口的方式
  • 实现Callable接口的方式

继承Thread类

  1. 定义类继承Thread类
  2. 重写run方法,编写新线程要执行的代码
  3. 创建子类对象调用start()方法
MyThread mt = new MyThread();//新建一个线程
mt.setName("线程名字");//设置线程名字
mt.start();//执行当前线程

Thread.currentThread().getName();//输出当前线程名字
public class MyThread extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName()+"-------------"+i);
        }
    }
}
public class Test001 {
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.setName("Thread线程1");
        myThread.start();

        MyThread myThread1 = new MyThread();
        myThread1.setName("Thread线程2");
        myThread1.start();
    }
}

实现Runnable接口

public class MyRunnable implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName()+ ": " + i );
        }
    }
}
public class Test001 {
    public static void main(String[] args) {
        MyRunnable myRunnable = new MyRunnable();
        Thread thread = new Thread(myRunnable,"runnable线程1");
        thread.start();
    }
}

区别:

img

Thread类

静态方法

Constructor and Description
Thread() 分配一个新的 Thread对象。
Thread(Runnable target) 分配一个新的 Thread对象。
Thread(Runnable target, String name) 分配一个新的 Thread对象。
Thread(String name) 分配一个新的 Thread对象。

方法

long getId() 返回此线程的标识符。
String getName() 返回此线程的名称。
void setName(String name) 将此线程的名称更改为等于参数 name

线程安全问题

多个线程同时操作共凉资源导致数据错乱,称为线程安全问题。

出现线程安全问题的原因

  • 多线程并发
  • 同时访问共享资源

线程同步的核心思想

加锁,把共享资源进行上锁,每次只能一个线程进入,操作完毕以后解锁,然后其他线程才能进来

线程同步

方式一:同步代码块

方式二:同步方法

方式三: Lock锁

同步代码块

synchronized(锁对象){
 多条操作共享数据的代码
}
锁对象要求:
    原则上:锁对象必须是同一个对象。
    语法上:任意对象都可以作为锁。
posted @ 2023-05-01 14:07  YxinHaaa  阅读(1)  评论(0编辑  收藏  举报