本帖最后由 小石姐姐 于 2019-5-17 11:16 编辑
之前讲的流是针对于文件的读写的
System.in System.out是针对于控制台的
字节打印流和字符打印流是针对于文件的
进程线程的概念:
进程:把正在运行的应用程序称为进程(进程当中包含线程的)
线程:就是一个执行路径 默认单线程的编号是1 从上至下执行代码体
多线程的实现方式(多个线程)
方式1:继承Thread类
定义一个类...继承Thread类(java.long包下的)
在定义的类中重写run()方法
创建自己定义类的对象
启动线程(start方法)
两个小问题:
为什么要重写run()方法?
因为run()是用来封装被线程执行的代码
run()方法和start()方法的区别?
run():封装线程执行的代码,(直接调用,相当于普通方法的调用)直接调用run方法还是单线程执行程序
start():启动线程;然后由JVM调用此线程的run()方法(实现多线程)
线程有名称和编号 name,id
默认线程编号为1被称为母线程 由它制作别的线程 分配默认编号 可以自己设置线程名称
在多线程的环境下 start之后是两个线程并行运行
设置和获取线程名称的方法
设置名称:1.setName(String name);
2.通过带参构造方法直接传入字符串类型的名称
获取名称:1.getName()
//static Thread currentThread() 返回对当前正在执行的线程对象的引用。通过引用调用getName方法
2.Thread.currentThread().getName();
线程优先级:
默认情况下线程的优先级相同
cpu不能同时执行多个线程的代码 是在线程中轮循执行
java默认情况下是用cpu的抢夺方式占用cpu的
几个线程同时执行start方法后 线程就准备就绪了(准备抢cpu资源) 开始同时抢cpu (百米赛跑 起跑线相同)
当一个线程一次抢夺到cpu以后,它的可执行力度,是代码行级的有可能执行了几句 就丧失了这次cpu的权限 释放权限 但是至少执行了一句;
执行完一次之后别的线程开始执行(cpu选择但是不是顺序执行 是随机选择) ;
设置优先级:setPriority(1-10);
获取优先级:getPrionrity()
优先级范围:1-10 默认优先级是5
线程死亡有两种:自然死亡(完成任务之后就消失)
虚拟机垃圾回收线程是守护线程
线程控制方法:
休眠sleep(毫秒数)
等待线程死亡 join()
守护线程setDaemon()
线程的五种状态1.新建2.就绪.3 运行 4死亡 5阻塞
实现线程的方式二:实现Runnable接口(他没有start方法)
1.定义一个类实现Runnable接口
2.在自己定义的类中重写run()方法
3.创建自己创建类的对象
4.创建Thread类的对象,把自己创建类的对象作为构造方法的参数
5.启动线程
用Runnable接口 怎么调出线程的名字.Thread.currentThread().getName();
Thread(Runnable t,String name)//这是Thread的构造方法 传一个接口实现类的对象,后边的name是线程的名字
这个实现的好处是 他的实现类 将来可以继承别的类 有自己的方法
避免了JAVA单继承的局限性
适合多个相同程序的代码去处理同一个资源的情况,把线程和程序的代码、数据有效分离,较好的实现了面向对象的设计思想
线程优先级高只是线程获取的CPU时间片的几率高,但是要在次数比较多,或者多次运行的时候才能看到你想要的效果;
同步块只能锁同一个对象才有用 |
|