1、线程的创建与运行(方式一):

--1)创建一个Thread的子类;

--2)重写Thread类的run()方法;

--3)创建一个子类的对象;

--4)调用线程的start()方法来启动线程,Java虚拟机将调用run()方法。

public class TestThread {
public static void main(String[] args) {
// TODO Auto-generated method stub
SubThread st = new SubThread();
st.start(); System.out.println("---MainThread---");
}
} class SubThread extends Thread{
@Override
public void run() {
System.out.println("---SubThread---");
}
}

2、Thread的常用方法:

--1)start(); //启动线程

--2)run(); //子线程要执行的代码写在该方法中

--3)currentThread(); //静态方法,调取当前线程

--4)getName(); //获取当前线程名称

--5)setName(); //设置当前线程名称

--6)yield(); //释放当前CPU执行权

--7)join(); //在A线程中调用B线程的join()方法,此时A线程停止执行,B线程开始执行,直到B执行完毕A再继续执行

--8)isAlive(); // 判断当前线程是否为活动的

--9)sleep(long l);//显示的让当前线程睡眠l毫秒

--10)线程通信:wait(),notify(),notifyAll()

--11)优先级:getPriority(),setPriority()

3、方式二:

--1)创建一个类,该类需实现Runnable接口;

--2)实现Runnable接口的抽象方法run();

--3)创建实现类对象;

--4)将此对象作为形参传递给Thread类的构造器中,创建Thread类对象;

--5)调用start()来启动线程。

4、方式二优于方式一,即实现的方式优于继承的方式,因为实现的方式避免了Java单继承的局限性而且更易于共享数据。

5、使用多线程的优点:

--1)提高应用程序的响应;

--2)提高计算机系统CPU的利用率;

--3)改善程序结构。

6、线程分类:1)守护线程;2)用户线程。

7、线程的生命周期:1)新建;2)就绪;3)运行;4)阻塞;5)死亡。

8、线程的同步:

--1)同步代码块;

synchronized(同步监视器){

  //需要被同步的代码

}

--2)同步方法:将操作共享数据的方法声明为synchronized。

9、死锁:不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源。解决的方法:

--1)专门的算法、原则;

--2)尽量减少同步资源的定义。

10、线程的通信:

--wait():令当前线程挂起并放弃CPU、同步资源,使别的线程可访问并修改共享资源,二当前线程排队等候再次对资源的访问;

--notify():唤醒正在排队等待同步资源的线程中优先级最高者结束等待;

--notifyAll():唤醒正在排队等待资源的所有线程结束等待。

--注:上诉三个方法只有在synchronized方法或者synchronized代码块中才能调用,否则会出现异常(java.lang.IllegalMonitorStateException)

Java笔记--多线程的更多相关文章

  1. java笔记--多线程基础

    多线程技术 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3889579.html  "谢谢-- 在java中实现多线程技术 ...

  2. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  3. Java学习笔记-多线程-创建线程的方式

    创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...

  4. Java笔记(十九)……多线程

    概述 进程: 是一个正在执行中的程序 每一个进程执行都有一个执行顺序,该执行顺序是一个执行路径,或者叫一个控制单元 线程: 就是进程中的一个独立的控制单元,线程在控制着进程的执行 一个进程中至少有一个 ...

  5. [Java][读书笔记]多线程编程

    前言:最近复习java,发现一本很好的资料,<J​a​v​a​2​参​考​大​全​ ​(​第​五​版​)​> ​ ​H​e​r​b​e​r​t​.Schildt.书比较老了,06年的,一些 ...

  6. Java笔记15:多线程

    Java实现多线程有两种方式:一是继承Thread类:二是实现Runable接口. 一.Thread实现 publicclass ThreadDemo2 { publicstaticvoid main ...

  7. 2.1多线程(java学习笔记) java中多线程的实现(附静态代理模式)

    一.多线程 首先我们要清楚程序.进程.线程的关系. 首先进程从属于程序,线程从属于进程. 程序指计算机执行操作或任务的指令集合,是一个静态的概念. 但我们实际运行程序时,并发程序因为相互制约,具有“执 ...

  8. Java:多线程<一>

    程序运行时,其实是CPU在执行程序的进程,为了提高工作效率一个进程可以有多个线程. Java的多线程: 其实我们之前就见过Java的线程,main就是Java的一个线程,还有另一个条线程总是和main ...

  9. 跟着刚哥梳理java知识点——多线程(十六)

    创建多线程第一种方式:① 继承:继承Thread.② 重写:重写Thread类的run()方法③ 创建:创建一个子类的对象④ 调用:调用线程的start()方法,启动此线程,调用run()方法 cla ...

随机推荐

  1. UIKeyWindow的设置

    新建一个纯代码iOS项目,需要对AppDelegate文件和项目的Info.plist文件做一番配置. 第一步:将Info.plist中的下面两项的value删除掉(保留空字符串),如下图 第二步:在 ...

  2. 标签UILabel的讲解

    首先,我先自定义几个名词,方便接下来的讲解工作.如下图所示: 接下来,通过五个方面来讲解我们能对UILabel做出哪些改变或者称之为设置: 1.文字 1.1普通文字:内容text.字体大小font.字 ...

  3. Codeforces Round #579 (Div. 3)D(字符串,思维)

    #include<bits/stdc++.h>using namespace std;char s[200007],t[200007];int last[200007][27],nxt[2 ...

  4. 建小程序 - 报Error: EPERM : operation not permitted, scandir mac下改变一个目录的访问权限

    问题:用微信开发者工具,建一个小程序,报错(见图1): 建小程序 - 报Error: EPERM : operation not permitted, scandir 解决: 1.打开终端 2.cd ...

  5. 简析ThreadLocal原理及应用

    简析ThreadLocal原理及应用 原创: 东晨雨 JAVA万维猿圈 4月17日 ThreadLocal的源码加上注释不超过八百行,源码结构清晰,代码也比较简洁.ThreadLocal可以说是Jav ...

  6. 142、Java内部类之在普通方法里面定义内部类

    01.代码如下: package TIANPAN; class Outer { // 外部类 private String msg = "Hello World !"; publi ...

  7. No module named 'widgets'

    https://blog.csdn.net/heatdeath/article/details/70313645 适配python3的. https://github.com/twz915/Djang ...

  8. topthink/think-swoole 扩展包的使用 之 WebSocket

    嗯~ o(* ̄▽ ̄*)o,没错欢迎收看继续爬坑系列233...话不多说直接开撸 今天的题材是websocket,没有特殊说明的话默认环境都和此系列第一篇文章中申明一致,此后不再赘述. websocke ...

  9. ROS学习笔记9-创建ros消息和服务

    该节内容主要来自于官方文档的两个小节:1.使用rosed来编辑2.创建ros消息的服务 先来看rosed: rosedrosed命令是rosbash的一部分,使用rosed可以直接编辑包中的一个文件, ...

  10. java虚拟机之内存分配

    Java 的自动内存管理主要是针对对象内存的回收和对象内存的分配.同时,Java 自动内存管理最核心的功能是 堆 内存中对象的分配与回收. JDK1.8之前的堆内存示意图: 从上图可以看出堆内存分为新 ...