传智播客旗下技术交流社区北京校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Zzz...123 初级黑马   /  2019-5-13 14:43  /  27 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小石姐姐 于 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时间片的几率高,但是要在次数比较多,或者多次运行的时候才能看到你想要的效果;

同步块只能锁同一个对象才有用
分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马