和线程之间的关系:

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

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

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()停止线程

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

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

通过标志位让线程停止。

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

  1. [Java复习] 多线程&并发 知识点补充

    0. wait/notify/notifyAll的理解? wait:让持有该对象锁的线程等待: notify: 唤醒任何一个持有该对象锁的线程: notifyAll: 唤醒所有持有该对象锁的线程: 它 ...

  2. [Java复习] 多线程 Multithreading

    Q1多线程基础 进程和线程? 进程: 1. 一段程序执行过程,动态的,相对而言程序是静态的.(与类和对象的关系类似) 2. CPU资源分配最小单元,包括CPU调度和资源管理. 3. 一个进程可以有多个 ...

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

    开启一个线程 实现一个线程的方式有两种:继承Thread类.实现Runnable接口(也存在说三种的情况,第三种是使用线程并发库中的线程池创建一个线程).这两种方法都需要重写Run方法,具体的线程逻辑 ...

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

    线程安全问题? 当多个线程共享同一个全局变量,做写的操作时,可能会受到其他线程的干扰.读不会发生线程安全问题. --  Java内存模型. 非静态同步方法使用什么锁? this锁 静态同步方法使用什么 ...

  5. Java复习8.多线程

    Java复习8 多线程知识 20131007 前言: 在Java中本身就是支持多线程程序的,而不是像C++那样,对于多线程的程序,需要调用操作系统的API 接口去实现多线程的程序,而Java是支持多线 ...

  6. Java复习1.基本知识

    Java语言概述 20131003 开头语: 开发领域,重要的编程语言基本都是C/C++,然后就是Java, C/C++就不用说了,另外掌握Java对你是有很大的帮助的,而且也会扩宽你的择业范围.同时 ...

  7. 【Java】多线程入门

    Java多线程学习(入门) 前言 目前对于线程的了解仅仅停留在学习python的threading库,很多线程的概念没有真正弄清楚,所以选择来系统性的学习多线程.那么这次选择的是Java的多线程学习, ...

  8. Java的多线程机制系列:不得不提的volatile及指令重排序(happen-before)

    一.不得不提的volatile volatile是个很老的关键字,几乎伴随着JDK的诞生而诞生,我们都知道这个关键字,但又不太清楚什么时候会使用它:我们在JDK及开源框架中随处可见这个关键字,但并发专 ...

  9. java之多线程 二

    线程的生命周期: 当线程被创建并被启动时,它既不是一启动就进入了执行状态,在线程的生命周期中,它要经过new(新建),就绪(Runnable),运行(Running),阻塞(Blocked),dead ...

随机推荐

  1. base关键字

    base关键字      专门用来在子类访问父类成员 base.标识符:“.”调用父类同名属性.同名函数.构造函数 ()父类person public class Person { public Pe ...

  2. 高可用的池化 Thrift Client 实现(源码分享)

    本文将分享一个高可用的池化 Thrift Client 及其源码实现,欢迎阅读源码(Github)并使用,同时欢迎提出宝贵的意见和建议,本人将持续完善. 本文的主要目标读者是对 Thrift 有一定了 ...

  3. Docker集群实验环境布署--swarm【1 架构说明】

    在读完<Docker技术入门与实践>这本书后,基本上已对Docker了有一些入门的理解,以及我们为什么要使用Docker 答:我们发现在实际工作中,通过openstack一旦把一个VM创建 ...

  4. iOS软件架构——架构模式(Architectural Pattern)

    一个架构模式描述软件系统里的基本的结构组织或纲要.架构模式提供一些事先定义好的子系统,指定它们的责任,并给出把它们组织在一起的法则和指南.有些作者把这种架构模式叫做系统模式[STELTING02]. ...

  5. android两种方式获取AsyncTask返回值

    获取AsyncTask返回值,在Activity中使用. 引用链接:https://www.oschina.net/code/snippet_725438_49858#72630 [1].[代码] [ ...

  6. 我是这样使用template.js来异步渲染数据的

    总监的代码用的是define+module.exports,为了效率先没去了解那一块,在github上找了一款功能单一的template.js来使用 https://github.com/yanhai ...

  7. [MFC美化] SkinSharp使用详解2-SkinH.h函数介绍

    SkinSharp功能强大,该皮肤库支持完全多种颜色改变等. 下面是静态链接库时的SkinH.h头文件: /*在Stdafx.h文件中加入如下语句 #include "SkinH.h&quo ...

  8. asp.net——初识多线程

    1.首先讲解一下什么是线程(该定义是参考线程的百度百科) 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元.一个标准的线程由线程ID,当前指令指针( ...

  9. MySQL新增用户以及数据库访问授权

    # mysql -u root -p # 允许本地 IP 访问 localhost, 127.0.0.1 # insert into mysql.user(Host,User,Password) va ...

  10. POJ 1118 Lining Up

    枚举,排序. 先将所有点按双关键字排序,然后枚举线的顶点$P$,剩余的点以$P$为中心进行极角排序,可以取个$gcd$,这样一样的点就排在一起了,然后统计一下更新答案. #pragma comment ...