复习与线程

复习

异常

概念:因语法,思路,硬件等问题导致程序非正常结束的都称为异常

分类:

Throwable
 错误:Error
 异常:Exception
     检查时异常:
         CheckedException
     运行时异常:
         RuntimeException

异常出现后导致的情况

程序无法正常结束

解决方案

方案1:try catch       真的是在解决问题
    语法:
        try{
                        异常代码
        }catch(异常类型 变量名){
                    处理方式
        }catch(异常类型 变量名){
                    处理方式
        }
        ...
        catch(异常类型 变量名){
                    处理方式
        }finally{
                        比逊执行的代码,
        }
    注意:
        1,catch先子后父,如果没有继承关系无所谓顺序
        2,finally可有可无,最多只能有一个
        3,try中代码不易过多
方案2:throw与throws
    throw:
        作用:抛出异常,把异常扔出去
        语法:
            throw 异常对象;
        位置:
            方法中
    throws
        作用:声明异常,就是告诉你有问题
        语法:
            throws 异常类型1,异常类型2,...
        位置:
            形参之后

自定义异常

步骤:
    1,创建一个类
    2,使其继承与Exception或Exception的子类
    3,编写其构造函数
        父类无参
        父类有参
            str:异常信息

数据结构

队列

单链表

Alt + 回车,选择对应的可快捷写异常

今日

线程的初识

作用

使代码可以同时执行多个事物

名词

进程:
    一个正在进行的程序
线程:
    一个执行路径
多线程:
    一个进程中有多个线程
主线程:
    一个进程在创建时自带的一条线程,该线程被称为主线程
子线程:
    除主线程以外的线程都是子线程
守护线程(后台线程):
    特点:如果一个进程的前台线程全都被销毁,此时不管是否有守护线程正在执行,此时进程都将被回收
前台线程
    特点:如果一个进程中有前台线程存活,此时系统将不会回收进程

线程的组成

CPU时间片

线程抢夺到CPU执行权后可执行的时间

内存

一个线程一个栈内存,多个线程共享一个堆内存

逻辑

使用步骤

1,创建
2,使用

线程的创建

方案1:创建Thread的子类对象

方式1:创建Thread的子类对象
	步骤:
		1,创建一个类
		2,使其继承与Thread
		3,重写run方法
			注意:当前线程启动后,将执行run方法中的代码
		4,创建该类对象
	优点:
		可以创建无数个该类对象

方式2:使用匿名内部类的形式创建Thread的子类对象
	步骤:
		Thread 对象名 = new Thread(){
			重写run方法
		};
	优点:
		便于书写
	缺点:
		只能创建一个该线程对象

方案2:将线程(Thread)与线程任务(Runnable)分开

方式1:普通方式创建Runnable的子类对象
	步骤:
		1,创建一个类
		2,使其实现Runnable接口
		3,重写run方法
		4,创建该类对象
		5,在创建线程对象时传入该类对象(线程任务对象)
方式2:使用匿名内部类创建Runnable的子类对象
	步骤:
		1,Runnable 对象名 = new Runnable(){
			重写run方法
		};
		2,创建线程对象时传入该类对象(线程任务对象)

线程的启动

线程对象.start();
注意:
	1,当线程启动后会开启新的执行路径,执行run方法中的代码
	2,如果直接使用线程对象调用run方法,不会开启新的执行路径

线程的销毁

线程已经启动,无法控制,需要等待执行完run方法中的代码

获取当前线程对象

Thread.currentThread();

线程名称

获取线程名称
	线程对象.getName();
修改线程名称
	线程对象.setName(name);
	注意:在启动之前

线程的优先级

作用:提高线程抢夺到CPU执行权的概率(不管设置多大都不可控)

语法:
	线程对象.setPriority(int);	设置线程优先级
注意:
	1,取值范围1~10
	2,必须在线程启动前

线程休眠

作用:让线程暂时停止运行

方法:
	static void sleep(休眠时间);
使用:
	Thread.sleep();	写在哪里,就是让哪个线程休眠
注意:
	1,单位毫秒
	2,使用类名调用,使当前线程休眠
	3,线程休眠期间不会抢夺CPU执行权

线程的礼让

作用:将获取到的CPU执行权让出,重新参与抢夺

方法:
	static native void yield();
使用: 
	Thread.yield();
写在线程中

线程合并

作用:合并线程

方法:
	public final void join()

案例

package com.qf.demo011;

public class Test {
public static void main(String[] args) {
  //线程一
  Thread t01 = new Thread(new Runnable() {
      @Override
      //重写run方法
      public void run() {
          for (int i = 0; i < 100; i++) {
              try {
                  Thread.sleep(1);//从这里开始睡眠1毫秒
              } catch (InterruptedException e) {
                  e.printStackTrace();
              }
              System.out.println("线程1:" + i);
          }
      }
  });
  //线程二
  Thread t02 = new Thread(new Runnable() {
      @Override
      public void run() {
          for (int i = 0; i < 100; i++) {
              try {
                  Thread.sleep(1);
              } catch (InterruptedException e) {
                  e.printStackTrace();
              }
              System.out.println("线程2:" + i);
              if (i == 50){
                  try {
                  	//将线程1合并到线程2中
                  	//此时先执行完线程1未完成的代码,在执行线程2未完成的代码
                      t01.join();
                  } catch (InterruptedException e) {
                      e.printStackTrace();
                  }
              }
          }
      }
  });
  t01.start();
  t02.start();
}
}

守护线程

简介

又名:后台线程
特点:
	当一个进程中有前台线程存活,此时该进程就不会被系统回收
	如果一个进程中只剩后台线程,此时不管后台线程中的代码是否运行完毕,系统都将回收该进程
方法:
	public final void setDaemon(boolean on);
	true表示守护线程,默认为false,表示前台线程
注意:
	1,创建的线程对象与主线程默认为前台线程
	2,必须在线程启动前

线程的生命周期

创建
就绪
运行
消亡
休眠
	有限期
	无限期

作业

1,整理笔记
2,使用四种方法创建线程对象,并启动
3,请问使用线程对象调用start方法与调用run方法的区别
4,如何获取当前线程
5,编写线程打印大写字母A~Z
6,编写线程打印小写字母a~Z
7,编写程序打印数字1~52
8,编写代码实现5个线程各自销售1000张票的问题
9,编写代码实现5个线程共销售1000张票的问题
10,一个线程打印大写字母,一个线程打印小写字母,打印结果要求如下
	AaBbCcDd...Zz
11,一个线程打印大写字母,一个线程打印数字1~52,打印结果要求如下
	12A34B56C78D...5152Z
12,使用代码讲述龟兔赛跑的故事
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值