线程、反射、IO流

3.线程、JUC并发编程

3.1进程、线程、关系

进程是具有一定独立功能的程序、他是系统进行资源(内存)分配和调度的最小单位,重点在系统调度和单独的单位,也就是说进程是可以独立运行的一段程序
线程
线程是进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源。
关系:
1.一个线程只能属于一个进程,而一个进程可以拥有多个线程,但至少有一个线程(主线程)
2.资源分配给进程,同一进程的所有线程共享该进程的所有资源
3.线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。
4.CPU是分给线程,即真正在CPU上运行的是线程。
5.线程是指进程内的一个执行单元,也是进程内的可调度实体。
3.2
创建线程的方式
1.继承Thread
(继承扩展性不强,java总只支持单继承,如果一个类继承Thread就不能继承其他的类了)
2.实现Runnable接口
3.实现Callable接口,重写Call方法(有返回值)
4.线程池
设置一个线程名称(thread.setName)可以区分线程
3.3 Callable与Runnable区别:
1.可以有返回值
2.可以抛出异常
3.方法不同,分别是call()和run()
4.Callable效率高
3.4守护线程是什么?用什么方法实现守护线程
守护线程是运行在后台的一种特殊进程
他独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。
在Java中垃圾回收线程就是特殊的守护线程。
3.5什么是串行、并发、并行
串行的特点:前一个任务没搞定,下一个任务就只能等着。
并行是指程序在某一时刻处理事件的能力
并发是指程序在某一时间段处理事件的能力
并行的关键是你有多个同时处理任务的能力。
并发的关键是你有多个任务处理的能力,不一定要同时
关键点是:是否同时
假设有一个老师有三个学生需要辅导作业,帮每个学生辅导完作业是一个任务
1、顺序执行:老师先帮学生A辅导,辅导完之后再取给B辅导,最后再去给C辅导,效率低下 ,很久才完成三个任务
2、并行:直接让三个老师甲、乙、丙三个老师“同时”给三个学生辅导作业,也完成的很快。
3、并发:老师先给学生A去讲思路,A听懂了自己书写过程并且检查,而老师在这期间又去给B讲思路,讲完思路再去给C讲思路,让B自己整理步骤。这样老师就没有空着,一直在做事情,很快就完成了三个任务。
与顺序执行不同的是,顺序执行,老师讲完思路之后学生在写步骤,这在这期间,老师是完全空着的,没做事的,所以效率低下。

3.6启动一个线程是用run()还是start()?
启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。而启动了以后执行的是run方法。
3.7sleep()方法和wait()方法区别和共同点
共同点:两者都可以暂停线程的执行。
1.两者最主要的区别在于:sleep()方法没有释放锁,而wait()方法释放了锁。
2.wait()通常被用于线程间交互/通信,sleep()通常被用于暂停执行。
3.wait()方法被调用后,线程不会自动苏醒,需要别的线程调用同一个对象上的notify()或者notifyAll()方法。sleep()方法执行完成后,线程会自动苏醒。或者可以使用wait(long timeout)超时后线程会自动苏醒。

IO输入输出流

IO流的分类
1.根据处理的数据类型不同可以分为:字符流和字节流
2.根据数据的流向不同可以分为:输入流和输出流
IO流分别用四个抽象类表示:InputStream,OutputStream,Reader,Writer.
1.1java中什么是序列化和反序列化
序列化:八java对象转换为字节序列的过程。ObjectOutputStream实现Serializable接口
反序列化:把字节序列恢复为java对象的过程。ObjectInputStream
1.2java序列化中如果有些字段不想进行序列化怎么办
使用transient关键字修饰。
阻止实例中那些用此关键字修饰的变量序列化,当对象被反序列化时,被transient修饰的变量值不会被持久化和恢复。
transient只能修饰变量,不能修饰类和方法。
1.3java创建对象的几种方式
1.用new语句创建对象;
2.运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法;
3.调用对象的clone方法;
4.运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法;

反射

1.1什么是反射
Reflection(反射)是java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类得内部信息,并能直接操作任意对象的内部属性及方法。
加载完类之后,在堆内存的方法区就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子可以看到类的结构,所以,我们形象的称之为:反射

1.2反射API类
1.Class类:反射的核心类,可以获取类的属性,方法等信息。
2.Field类:Java.lang.reflec包中的类,表示类的成员变量,可以用来获取和设置类之中的属性值。
3.Method类:Jav.lang.reflec包中的类,表示的方法,可以用来获取类中的方法信息或者执行方法。
4.Constructor类:java.lang.reflec包中的类,表示类的构造方法。
1.3反射使用步骤
1.获取想要操作的类的Class对象,他是反射的核心,通过Class对象我们可以任意调用类的方法。
2.调用Class类中的方法,就是反射的使用阶段。
3.使用反射API来操作这些信息。
1.4获取Class对象的三种方法
1.调用某个对象的getClass()方法
2.调用某个类的class属性来获取该类对应的Class对象、
3.使用Class类中的forName()静态方法(最安全/性能最好)

	 
        //1.对象.getClass();
        Student student = new Student();
        Class clazz3 = student.getClass();
        //2.类型.class
        Class clazz2 = Student.class;
        //3.Class.forName();
        Class clazz1 = Class.forName("DAY17.Student");
       
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值