java复习-多线程

和线程之间的关系:

进程:进程是程序的一次动态执行过程,他经理了代码加载,执行到执行完毕的一个完整过程,这个过程也是进程本身从产生,发展到最终消亡的过程。

线程:线程是实现并发机制的一种有效手段,进程和线程一样,都是实现并发的一个基本单元。

java中多线程实现:

集成Thread和实现runnable

通过线程类的start方法来并发执行线程里面的线程主体内容。

Runnable线程的执行方式如下:


Thread是Runnable接口的子类.

Thread类与Runnable接口的区别:

1 使用Thread类在操作多线程的时候无法达到资源共享的目的,runnable接口能够实现资源共享;

2  Runnable接口比起继承Thread类有如下的明显的优点:

  • 适合多个相同程序代码的线程去处理同一个资源。
  • 可以避免由于但继承局限所带来的影响。
  • 增强代码的健壮性,代码能够多线程共享,代码和数据独立

线程状态:

创建状态:线程对象创建之时:Thread t = new Thread();

就绪状态:t.start(),调用start方法,等待cpu进行调度;

运行状态:执行线程里面的run方法;

阻塞状态:暂时停止执行,可能将资源交给其他线程使用,调用线程的wait或者sleep方法;

终止状态:线程执行完毕后不在使用了。

线程常用操作方法:

取得线程和设置线程名称:

Thread.currentThread().getName(); -- >获取线程名称。

当然也可以通过setName方法进行设置。

java运行时候启动几条线程:

2条;

1条jvm线程,一条gc线程。

判断线程是否运行:

强制线程执行:

调用线程的join()方法,其他线程无法运行,必须等待此线程完成后才能继续执行。

线程休眠:

Thread.sleep()。

线程中断:

一个线程被另外一个线程中断其操作的状态,使用interupt()方法完成。

后台线程:

只要程序没执行完,java进程不会消失,设置后台线程,即使进程消失,线程继续执行。

通过setDaemon()来实现。

线程优先级:

线程礼让:

同步和死锁:

同步是解决什么问题呢,一个数据在读取的时候,其他线程访问该线程,那么这时候就应该使用同步。

同步代码块:

同步方法:

生产者消费者问题:

线程生命周期:

线程有:

suspend()暂时挂起线程

resume()恢复挂起的线程

stop()停止线程

这三个方法容易导致死锁问题,不推荐使用。

比较好的停止线程的方法:

通过标志位让线程停止。

时间: 2024-07-29 11:03:04

java复习-多线程的相关文章

Java 复习 —— 多线程同步

1.问题引出 在多线程环境中,可能有多个线程同时访问一个有限的资源(资源共享),为了避免资源访问.操作混乱,所以出现了锁的机制!合理控制资源的操作(读与写)权限. 2.了解几个概念 1)获取CPU资源:线程想要执行必须得到CPU资源,这是一个必要条件!然而资源的调度是操作系统根据线程的优先级.线程资源的使用等因素来确定的.不需要深究,只要知道线程想要运行必须要获取到CPU资源,这是一个门槛.我们总是纠结Thread 的 sleep.yield.start 之后到底什么时候运行,其实就是CPU资源

Java 复习 —— 多线程基础

1.基本概念 1)进程:运行当中的程序,程序是静止的概念,进程的是动态的概念,进程与进程之间互不运影响 2)线程:指程序中单独顺序的流控制,线程依附于进程中,他是最小的执行单位!一个任务一个线程. 3)多线程:指的是单个程序中可以同时运行多个不同的线程,执行不同的任务.(本身就要把线程理解为为不同的任务而服务的) 4)二者关系:一个进程当中可以有一个或多个线程,但是至少有一个线程. 2.作用与关系 1)多线程的目的:最大限度利用CPU资源 2)主线程:Java程序默认启动一个线程就是main线程

Java复习——多线程与并发库

开启一个线程 实现一个线程的方式有两种:继承Thread类.实现Runnable接口.这两种方法都需要重写Run方法,具体的线程逻辑代码写在Run方法中.其实Thread类就实现了Runnable接口,但是并没有什么说法是使用哪种方式存在效率高低的问题,推荐使用实现Runnable接口的方式,因为更加面向对象,而且实现一个接口比继承一个类更灵活.我们可以使用匿名内部类的方式很方便的开启一个线程(使用Tread类的start方法开启一个线程): Thread : new Thread(){ pub

[Java复习] 多线程 并发 JUC 补充

线程安全问题? 当多个线程共享同一个全局变量,做写的操作时,可能会受到其他线程的干扰.读不会发生线程安全问题. --  Java内存模型. 非静态同步方法使用什么锁? this锁 静态同步方法使用什么锁? 当前类的字节码文件 什么是ThreadLocal? ThreadLocal是给每个线程提供局部变量,每个线程可独立改变自己的副本,不会影响其他线程所对应的副本,解决线程安全问题. ThreadLocal底层原理是map集合. ThreadLocal内存泄漏问题? 由于ThreadLocalMa

Java 复习 —— 多线程中断

1.interrupt中断线程 1.interrupt 会给wait池中的线程抛出异常,这个时候该线程会被唤醒,但是同样还要继续竞争锁资源,才能继续运行! 2.interrupt 会给正在sleep的线程抛出异常,但是不会给yield线程抛出异常,个人感觉是因为sleep是指定多长时间阻塞,但是yield的确是不知道至少多长时间阻塞,另外yield这个方法只在测试使用,开发当中少用. 3.如果线程在调用 Object 类的 wait().wait(long) 或 wait(long, int)

Java高级复习㈠ 多线程

1.线程 也称为轻量级进程,每个线程有自己的堆栈.程序计数器.局部变量.与进程相比,进程中的线程之间隔离程度要小 2.Java实现 ①implements Runnable ②extends Thread 一般推荐① 3.sleep().yield() sleep()方法对当前线程操作,指定以毫秒为单位的线程最小休眠时间,除非线程因中断提早恢复执行,否则不会在这段时间前恢复执行.线程可调用另一线程的interrupt()方法,向暂停的线程发出InterruptedException,变相唤醒暂停

Java基础--多线程的方方面面

1,什么是线程?线程和进程的区别是什么? 2,什么是多线程?为什么设计多线程? 3,Java种多线程的实现方式是什么?有什么区别? 4,线程的状态控制有哪些方法? 5,线程安全.死锁和生产者--消费者 6,线程的优化有哪些方法? 1,什么是线程?线程和进程的区别是什么? 线程是程序执行的最小单元. 区别: 进程是操作系统进行资源处理和分配的最小单位,而一个进程可以包含多个线程,并共享进程的资源. 2,什么是多线程?为什么设计多线程? 介绍之前,我们需要理解并行和并发的定义: 并行:同一个时刻有多

Java的多线程编程模型5--从AtomicInteger开始

Java的多线程编程模型5--从AtomicInteger开始 2011-06-23 20:50 11393人阅读 评论(9) 收藏 举报 java多线程编程jniinteger测试 AtomicInteger,一个提供原子操作的Integer的类.在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字.而AtomicInteger则通过一种线程安全的加减操作接口. 来看AtomicInteger提供的接口. //获取当前的值 publ

java实现多线程下载

本篇博客可认为是对 使用java实现http多线程下载 一文的再次解读. 首先,从宏观来说 java实现多线程下载这个功能的实现由以下几部分组成: 1 建立多个线程去分别下载文件的一部分. 2 将多个线程下载的文件(还在内存中),写入硬盘中的一个文件. 3 断点续传 GET /Path/FileName HTTP/1.0 Host: www.server.com:80 Accept: */* User-Agent: GeneralDownloadApplication Connection: c