Thread实例 java代码new java的thread_主线程

基本概念

线程 一堆命令的集合,进程静止的状态,包括了软件文件集合
进程 程序运行期间的动态状态,占用内存,cpu等资源
线程 进程下的最小执行单元
多任务 两种类型: 基于线程 基于进程
基于线程的的优点:1.开销少 2.进程间的调用涉及开销比线程通讯多
3.线程间的切换成本低
多线程 1.Java中,一个程序可以包含多个线程,并可以并发执行
2.多线程让系统的cup利用率提高
3.隐藏cup在任务间切换的事实
主线程 在java程序启动时,立即启动
作用:1.产生其他子线程,2.执行各种关闭动作
易错点 1.主线程不一定负责关闭其他子线程
2.主线程不一定是最后结束的(守护线程

线程基础运用

1.获取当前线程

Thread thread=Thread.currentThread();

2.判断线程是否存活

thread.isAlive()

3.让线程休眠

//  线程休眠(以毫秒未单位)5秒
  thread.sleep(5000);

4.等待线程消亡

thread.join();//等待线程消亡

创建线程

创建线程的两个方法
1.创建类,使类继承Threaded重写run 方法

2.实现接口

Thread thread3=new Thread(new Runnable() {
   
   @Override
   public void run() {
    System.out.println("子线程实现接口,匿名内部类");
    
   }
  });
  thread3.start();
易错点

启动线程的时候要用start()方法
若使用run()

守护线程

用来于服务用户线程(Java的垃圾回收线程就是守护线程)

当主线程已经关闭但子线程还没有关闭,就可以设置一个守护线程来关闭子线程。

设置守护线程

thread2.setDaemon(true);//设置未守护线程
  thread1.start();
  thread2.start();

注意: 1.setDaemon(true),必须在start()之前设置,否则会出现异常
2.守护线程中产生的子线程也是守护线程

设置线程优先级

注意: 1.优先级从低到高:1-10
2.注意:优先级低不代表拿不到资源

t1.setPriority(1);//设置优先级

易错

  1. 下面哪些情况能停止当前线程的运行:抛出一个例外时
  2. 当run方法执行完时,线程死亡

线程的并发

并发的原因:有两个及以上的线程,同时访问同一个不同步的资源

解决方法

1.同步方法

/*
  * 存钱
  */
 synchronized public void setMoney() {
  try {
   Thread.sleep(3);//模拟网络延迟
  } catch (InterruptedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  this.money=this.money+1;
 }

2.同步块
synchronized (object){
同步语句
}