java基础之多线程(一)

java基础之多线程(一)

今天我们学习java中比较重要的一个问题就是多线程,程序没有多线程,会使程序的功能变得非常的地下


1.进程和线程
进程:就是正在进行的程序,每一个进程执行都有一个执行单元,该顺序是一个执行路径或者叫一个控制单元
线程:进程内部的一个执行路径或者叫一个控制单元
两者的区别:
一个进程至少有一个线程
进程在执行过程中拥有独立的内存单元,而对于多线程是共享单元
2.jvm的启动问题


java的虚拟机jvm启动的是单线程,就会发生内存泄露的可能,而我们使用java程序没出现这样的问题,
也就是jvm至少启动了两个线程,一共是java执行的程序,一个是执行垃圾回收,所以是多线程的
3.多线程的优势
解决了多部分同时运行的问题,提高了效率
4.线程的弊端
线程太多会导致效率的降低,因为线程的执行依靠的是CPU的来回切换
5.什么叫多线程
一个进程有多个线程
6.实现多线程的方法:
实现多线程可以通过继承Thread类和实现Runnable接口
(1)继承Thread
定义一个类继承Thread类
复写Thread类中的public void run()方法,将线程的任务代码封装到run方法中
直接创建Thread的子类对象,创建线程

(2)实现Runnable接口
定义一个类,实现Runnable接口;
覆盖接口的public void run()方法,将线程的任务封装到run方法中;
创建Runnable接口的子类的对象
将Runnable接口的子类的对象作为参数传递给Thread类的构造函数,创建Thread类对象
(原因:线程的任务都封装在Runnable接口的子类的方法中,所以要在线程创建的时候就必须明确要运行的任务)
调用start()方法,启动线程
两种方法的区别

(1)实现Runnable接口避免了单继承的局限性
(2)继承Thread类线程代码存放在Thread子类的run方法中
实现RUnnable接口线程代码存放在接口的子类的run方法中
在定义线程的时候建议使用Runnable接口,因为几乎所有的多线程都可以使用这种方式实现
7.创建线程是为什么要复写run方法
Thread类用于描述线程,Thread定义了一个功能,用于存储线程要运行的代码,该存储功能及时run方法
8、线程的几种状态:
新建:new一个Thread对象或者其子类对象就是创建一个线程,当一个线程对象被创建,但是没有开启,这个时候,
 只是对象线程对象开辟了内存空间和初始化数据。        
就绪:新建的对象调用start方法,就开启了线程,线程就到了就绪状态。
 在这个状态的线程对象,具有执行资格,没有执行权。
运行:当线程对象获取到了CPU的资源。
 在这个状态的线程对象,既有执行资格,也有执行权。
冻结:运行过程中的线程由于某些原因(比如wait,sleep),释放了执行资格和执行权。
 当然,他们可以回到运行状态。只不过,不是直接回到。
 而是先回到就绪状态。
死亡:当线程对象调用的run方法结束,或者直接调用stop方法,就让线程对象死亡,在内存中变成了垃圾。      
9..sleep()和wait()的区别:
(1)这两个方法来自不同的类,sleep()来自Thread类,和wait()来自Object类。
(2)sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用了b的sleep方法,实际上还是a去睡觉,
要让b线程睡觉要在b的代码中调用sleep。而wait()是Object类的非静态方法
(3)sleep()释放资源不释放锁,而wait()释放资源释放锁;
(4)使用范围:wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用
10.多线程安全问题:
(1)原因:当程序的多条语句在操作线程共享数据时(如买票例子中的票就是共享资源),由于线程的随机性导致
一个线程对多条语句,执行了一部分还没执行完,另一个线程抢夺到cpu执行权参与进来执行,
此时就导致共享数据发生错误。比如买票例子中打印重票和错票的情况。
(2)解决方法:对多条操作共享数据的语句进行同步,一个线程在执行过程中其他线程不可以参与进来
11.Java中多线程同步是什么?
同步是用来解决多线程的安全问题的,在多线程中,同步能控制对共享数据的访问。如果没有同步,当一个线程在
修改一个共享数据时,而另外一个线程正在使用或者更新同一个共享数据,这样容易导致程序出现错误的结果。 
12.什么是锁?锁的作用是什么?
锁就是对象
锁的作用是保证线程同步,解决线程安全问题。
持有锁的线程可以在同步中执行,没有锁的线程即使获得cpu执行权,也进不去。
13.同步的前提:
(1)必须保证有两个以上线程
(2)必须是多个线程使用同一个锁,即多条语句在操作线程共享数据
(3)必须保证同步中只有一个线程在运行
14.同步的好处和弊端
好处:同步解决了多线程的安全问题

弊端:多线程都需要判断锁,比较消耗资源



-----------------------------闫继闯写于北京------------------------

黑马ID:疯狂程序

QQ:654070989


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值