多线程:

进程:正在进行中的程序(直译)

线程:执行路径,就是进程中负责程序执行的控制单元(执行路径);

一个进程中可以多个路径,称为多线程

一个进程至少一个线程

每一个线程都有自己运行的内容,这个内容称为线程要执行的任务

多线程好处:解决了多部分同时运行的问题

弊端:效率降低

应用程序的执行是CPU在做着快速的切换完成的,切换是随机的

jvm启动时就启动了多个线程,至少两个线程

1、执行main函数的线程

该线程的代码都定义在main函数中

2、负责垃圾回收的线程

finalize清除垃圾,重新分配资源

System.gc()启动垃圾回收器

主线程运行示例:

class  Demo  extends   Thread

{

private String name;

Demo (String name)

{

this.name=name;

}

public void run()

{

for(int x=0;x<10;x++)

{

for(int y=-99999;y<999999999;y++){}

System.out.println(name+“....x”+x);

}

}

}

class Threaddemo

{

Demo d1=new Demo(“旺财”);

Demo d2=new Demo(“xiaoqiang”);

d1.start();

d2.start();  //开启线程,运行run方法

}

创建线程:

1、继承Thread类

步骤:

1、定义一个类继承Thread 类;

2、覆盖Thread 中的run方法;

3、直接创建Thread的子类对象;

4、调用start启动线程;

创建线程的目的是为了开启一条执行路径,取运行指定代码和其他代码同时运行

而运行的指定代码就是这个执行路径的任务

JVM创建的主线程的任务都定义在主函数中

而自定义的线程任务在哪

Thread类用于描述线程,线程是需要任务的,所以Thread类也对任务的描述

这个任务通过Thread类中的run方法来体现,run方法中定义就是线程要运行的任务代码

开启线程是为了运行指定代码,所以继承Thread,复写run方法

调用start和run的区别

getName()返回该线程的名字,

currentThread()正在运行的线程名字

Cpu的执行资格:可以被CPU处理,在处理队列中排队

Cpu的执行权:正在被cpu处理

临时阻塞状态:具备执行资格,等待执行权

被创建           start()            运行          sleep(time)     wait()        冻结

Sleep(time)时间到  notify()

Run方法结束,线程的任务结束

Stop()

消亡

2、创建线程的第二种方式:implements        runnable接口

1、定义类实现runnable接口

2、覆盖接口中run方法

3、通过thread类创建线程对象,并将runnable接口中子类对象作为thread类参数传递

4、使用start开启线程

实现runnable接口的好处:

1、将线程的任务从线程的子类中分离出来,进行了单独的封装

线程安全问题解决思路:将多条操作共享数据的线程代码封装起来,当有线程执行代码时,其他不能参与运算;

同步代码块 :synchronized(对象)

{

需要被同步的代码;

}

同步的好处:解决了线程的安全问题;

同步的弊端:相对降低了效率,因为同步外的线程都会判断同步锁

多线程的单例:

单例设计模式:

延迟加载设计模式:

线程间通信(多个线程在处理同一资源,但是任务却不同):

1、这些方法存在于同步中;

2、使用这些方法时必须要标识所属的同步的锁;

等待、唤醒机制:

涉及的方法:1、wait():让线程处于冻结状态,被wait的线程会被存储线程池

2、notify() 唤醒线程池中任意一个线程

3、notifyAll() 唤醒线程池中所有线程

这些方法都必须定义在同步中,因为这些方法是用于操作线程状态的方法

必须要明确到底操作的是哪个锁上的线程

为什么这些方法定义在object类中

因为这些方法是监视器的方法,监视器本身就是一个锁

Wait和sleep的方法:

1、wait可以指定时间也可以不指定

Sleep必须指定时间

2、在同步中,对CPU的执行权和锁的处理不同

Wait:释放执行权,释放锁

Sleep:释放执行权,不释放锁

停止线程:

1、stop方法(已过时)

2、Run方法结束

任务中都有循环,通过控制循环结束

Interrupt()将线程从冻结状态恢复到运行状态,让线程具备CPU的执行资格

守护线程setDaemon(true)将该线程标记为守护线程,当所有线程被守护时,CPU退出

t1.join()方法:线程要申请加入进来,运行,在t1线程终止之后。临时加入一个线程运算时可以使用该方法

Java笔记(day13)的更多相关文章

  1. Effective Java笔记一 创建和销毁对象

    Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...

  2. java笔记00-目录

    --2013年7月26日17:49:59 学习java已久,趁最近有空,写一个总结: java笔记01-反射:

  3. java笔记整理

    Java 笔记整理 包含内容     Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, E ...

  4. 转 Java笔记:Java内存模型

    Java笔记:Java内存模型 2014.04.09 | Comments 1. 基本概念 <深入理解Java内存模型>详细讲解了java的内存模型,这里对其中的一些基本概念做个简单的笔记 ...

  5. servlet(6) - servlet总结 - 小易Java笔记

    垂阅前必看: 这都是我总结的我觉得是学习servlet应该掌握的,我在学习期间也做了一个博客项目来让所学的知识得以巩固.下面就是博客项目链接.前面的servlet相关的笔记总汇,还有就是我把觉得在学习 ...

  6. Java笔记 —— 继承

    Java笔记 -- 继承 h2{ color: #4ABCDE; } a{ text-decoration: none!important; } a:hover{ color: red !import ...

  7. Java笔记 —— 方法重载和方法重写

    Java笔记 -- 方法重载和方法重写 h2{ color: #4ABCDE; } a{ text-decoration: none !important; } a:hover{ color: red ...

  8. Java笔记 —— 初始化

    Java笔记 -- 初始化 h2{ color: #4ABCDE; } a{ text-decoration: none !important; } a:hover{ color: red !impo ...

  9. Java笔记 —— this 关键字

    Java笔记 -- this 关键字 h2{ color: #4ABCDE; } a{ color: blue; text-decoration: none; } a:hover{ color: re ...

  10. Java 笔记 —— java 和 javac

    Java 笔记 -- java 和 javac h2{ color: #4ABCDE; } a{ text-decoration: none !important; } a:hover{ color: ...

随机推荐

  1. "格式化的文本"组件:<span> —— 快应用原生组件

     `<template> <div class="container"> <text><span class="success ...

  2. NumPy学习2:基本运算

    数组相减: a = array([20, 30, 40, 50])print ab = arange(4)print bc = a-bprint c 结果: [20 30 40 50][0 1 2 3 ...

  3. Python 操作mysql数据库之 SQLAlchemy 案例详解

      前言: 字段声明类型中,最右边的是数据库中对应的字段,我们依然可以使用,其左边的的 SQLAchemy 则是其自身封装的自定义类型. 本篇不会讲太多的理论知识,因为这个实用性更强,所以通篇全部都是 ...

  4. 数据结构和算法(Golang实现)(24)排序算法-优先队列及堆排序

    优先队列及堆排序 堆排序(Heap Sort)由威尔士-加拿大计算机科学家J. W. J. Williams在1964年发明,它利用了二叉堆(A binary heap)的性质实现了排序,并证明了二叉 ...

  5. AJ学IOS(19)UI之QQ好友列表

    AJ分享,必须精品 先看效果图 哈哈,这次猫猫给来个动态的图片,这个看起来带劲 实现思路 首先建立模型 这里用到的是一个双层的模型. cell的实现 这里一看其实就知道是一个tableView,我们自 ...

  6. 新时代前端必备神器 Snapjs之弹动效果

    有人说不会 SVG 的前端开发者不叫开发者,而叫爱好者.前端不光是 Angularjs 了,这时候再不学 SVG 就晚了!(如果你只会 jQuery 就当我没说...)这里我就给大家分享一个前几天在别 ...

  7. GeoGebra函数使用

    分段函数使用 输入指令: If(x < -2, x, -2 < x < 2, x², x > 2, x)

  8. 我是如何一步步的在并行编程中将lock锁次数降到最低实现无锁编程

    在并行编程中,经常会遇到多线程间操作共享集合的问题,很多时候大家都很难逃避这个问题做到一种无锁编程状态,你也知道一旦给共享集合套上lock之后,并发和伸缩能力往往会造成很大影响,这篇就来谈谈如何尽可能 ...

  9. GNU的make命令、makefile编写

    makefile简介 makefile可实现工程的自动化编译,只需一个make命令即可一键完成.makefile定义了一些规则,指定哪些文件需要先编译.后编译.重新编译等. 一般的C或者C++程序,都 ...

  10. 详解 字符串—— String、StringBuffer 与 StringBuilder

    本来这篇博文的内容,本人打算在之后的代码中一点一点通过实例讲解的,但是,本人发现,其实这里的知识点还是蛮重要的. 并且,字符串类型,在任何的程序语言中都是被认真对待的,所以,今天专门写一篇博文来介绍一 ...