多线程的基础知识

多线程
程序
程序是含有指令和数据的文件,被储存在磁盘或者其他的数据存储设备中,程序是静态的代码。
进程
进程是程序的一次执行过程,是系统运行程序的基本单位,进程是动态的。
多任务
多任务是指在一个程序中可以同时运行多个进程,即有多个独立运行的任务,每一个任务对应一个进程。
线程
线程是一个执行中的程序,但是线程是一个比进程更小的执行单位,一个进程在其执行的过程中可以产生多个线程,形成多条执行路径。
同类的多个线程共享同一块内存和一组系统资源的。
多线程就是同时执行一个以上线程,一个线程的执行不必等待另一个线程执行完后才执行,所有线程可以发生在同一时刻。

线程的5种状态
在这里插入图片描述

实现多线程的两种方式

  • 子类继承Thread类,子类创建的线程都拥有各自的方法和变量。
  • 自己创建的类实现Runnable接口,可以轻松实现多个线程共享相同的数据,只要用同一个实现了Runnable接口的类的对象作为参数创建多个线程就可以。

Runnable接口适合处理多线程访问同一资源的情况,并且可以避免由于Java语言的单继承性带来的局限。

线程同步
防止多线程的后一个线程对同意变量的更改结果覆盖了前一个线程对变量名的更改结果,造成数据混乱,必须保证线程在一个完整的操作所有的动作的执行过程中,都占有相关的资源而不被打断,这就是线程同步的概念。

  • 临界资源(同步资源):在并发程序设计中,多线程共享的资源或数据。
  • 临界代码(临界区):每个线程中访问临界资源的那段代码成为临界代码。临界区必须互斥的使用。

Java技术利用对象“互斥锁”机制来实现线程之间的互斥操作。在Java语言中,每个对象都有一个“互斥锁”与之相连。

synchronized:用来标识同步的资源
synchronized的功能:首先判断对象或方法的互斥锁是否存在,如果如在就获得互斥锁,然后就可以执行紧随其后的临界代码段或方法体;如果对象或方法的互斥锁不存在,就进入等待状态,直到获得互斥锁。
说明:
1.synchronized通常锁定的是临界代码;
2.synchronized锁定的代码数量越少越好,否则会失去多线程的优势;
3.如果两个或多个线程锁定的不是同一个对象,则他们的synchronized代码块可以相互交替穿插并发执行;
4.所有的非synchronized代码块都可以自由的调用;
5.一个线程可以同时拥有两个对象的互斥锁;
6.任何时刻,一个对象的互斥锁只能被一个线程锁拥有;
7.只有带那个一个线程执行完他所调用对象的所有的synchronized代码块或方法时,该线程才会释放这个对象的互斥锁;
8.临界代码中的共享变量应该定义为private;
9.只能用临界代码中的方法访问共享变量;
10.一定要保证,所有对临界代码中共享变量的访问和操作都在synchronized代码块中进行;
11.通常共享变量都是私有静态变量;
12.对于一个static型的方法,要么整个方法是synchronized,要么整个方法不是synchronized。
13.如果synchronized在类中声明,则该类的所有方法都是synchronized的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值