关闭页面特效

多线程

1|0多线程


1|1概念


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

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

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

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

进程的特性:

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

关系:

线程是进程的执行单元

抢占cpu的是进程中的线程

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

1|2多线程运行原理


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

1|3多线程的实现方式


  • 继承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

1|4Thread类


静态方法

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

1|5线程安全问题


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

出现线程安全问题的原因

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

线程同步的核心思想

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

线程同步

方式一:同步代码块

方式二:同步方法

方式三: Lock锁

同步代码块

synchronized(锁对象){ 多条操作共享数据的代码 } 锁对象要求: 原则上:锁对象必须是同一个对象。 语法上:任意对象都可以作为锁。

__EOF__

作  者YXH
出  处https://www.cnblogs.com/YxinHaaa/p/17366471.html
关于博主:编程路上的小学生,热爱技术,喜欢专研。评论和私信会在第一时间回复。或者直接私信我。
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!

posted @   YxinHaaa  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
0
0
关注
跳至底部
点击右上角即可分享
微信分享提示