[总结] 第十四章 线程

线程

一个线程是进程内部的分支 。线程是共享一个进程的内存空间。\n

Thread 类 (线程)

1.写一个类继承Thread类,重写run();方法,\n

2.new 出这个类\n

3.调用这个类的start()方法,开启线程,该方法会为线程分配资源,然后自动调用this,run()方法,如果直接调用run方法不会报错,但只是普通的方法调用而已,并没有开启线程

第二种方式(如果一个类继承了一个父类):

runnable 接口,

1.写一个类实现runnable接口,重写run()方法。

2.先new 出这个类,在new 出thread 线程。

3.将线程接口传给thread 线程,再使用thread的start方法。

造成线程中断的五个状态:

1.z中断状态:cpu 执行其他线程没有执行本线程时,被执行的几率分为优先级(共10级),使用.setpriorty()方法

2.阻塞状态:由于输入输出造成的线程中断状态。

3.休眠状态:主动调用sleep()方法,给他一个毫秒数,在这个时间之后执行。

4.d等待状态:在object中的wait方法和notify 方法,等待和唤醒一般搭配使用。

5.挂起状态:强制将一个线程退出,yield()方法。

线程同步(synchronized)同步锁

当有时两个或多个线程可能会试图同时访问一个资源,在此情况下,数据可能会变的不一致,为了确保任何一个时间点共享的资源只被一个线程使用,便使用了“同步”,使用同步关键字 synchronized 作为标识。

t同步的第一种实现:

同步方法,在资源身上加同步关键字synchronized

t同步的第二种实现:在调用资源的线程上用synchronized 同步块,

列:synchronized (this.rs){
  this.rs.show(this.getName)();}

注意:包装类作引用类型传参时,会产生一个新的包装类对象,其效果与基本类型数据无异。\n

扩展:死锁

当两个线程同步同一资源两个功能,并且两个功能有相互依赖关系时。便成了死锁,这时便需要调用object的wait()和notify()方法。

时间: 2024-10-29 19:08:32

[总结] 第十四章 线程的相关文章

JAVA-初步认识-第十四章-线程间通信-多生产者多消费者问题-JDK1.5解决办法

一. 在1.5版本中,将原先的形式进行了改变,但是功能并没有任何变化,那么这么做的原因是什么? 以前,我们一个锁上只有一组监视器,这组监视器既监视着生产者,又监视着消费者.这组监视器能将生产者和消费者全都wait,也能将生产者和消费者全都唤醒.或者notify也行,它也能将其中一条线程唤醒,而其中一条不能确定是谁,有可能是本方,也可能是对方. 现在我们的线程进行了分类,一组负责生产,一组负责消费.我们希望生产者能够唤醒消费者,消费者唤醒生产者.如果搞两个监视器,一组监视生产者,一组监视消费者,这

JAVA-初步认识-第十四章-线程间通信-示例

一. 引言 之前讲述了线程的基本使用,卖票和存钱.卖票相当于把资源都释放出来,被别人获取到.而存钱,则是把数据都存进去. 现在,我们将线程进行了改变.以前是多个线程在执行同一个动作,无论是继承还是实现,都是一个run方法.换句话说,就是一个线程任务,多线程在同时执行一个任务.只不过它们是分别存放在了自己不同的线程栈里面,再进行统一运行,但是动作是一样的,比如说四个人都是卖票. 现在要讲述的是线程间通信.何谓通信,线程还是多个,但是运行的任务却变得不一样了.有个特点,它们处理的资源是一样的. 以前

JAVA-初步认识-第十四章-线程间通信-等待唤醒机制-代码优化

一. 上一节中的代码写的并不是很眼镜,如下图中的属性,应该都是私有的.我们不应该直接访问资源中的属性,是因为它具备了不安全性. 瞎赋值怎么办呢?为了可控,意味着资源里面的属性需要被私有化,并对外提供方法访问.因此上节中的代码要进行改写. 首先对资源描述类进行修改,至于为什么set方法中写有两个形参,是因为name和sex同时要做赋值,因此直接将它们定义在一起. 而且类中提供了直接输出name和sex的方法,后面的程序中就不需要写那么长的输出语句了.这个输出问题比较简单 关键问题在哪儿呢?如果这么

Python基础教程(第十四章 网络编程)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5538341.html______ Created on Marlowes 本章将会给读者展示一些例子,这些例子会使用多种Python的方法编写一个将网络(比如因特网)作为重要组成部分的程序.Python是一个很强大的网络编程工具,这么说有很多原因,首先,Python内有很多针对常见网络协议的库,在库顶部可以获得抽象层,这样就可以

javascript高级程序设计 第十四章--表单脚本

javascript高级程序设计 第十四章--表单脚本 在HTML中表单由<form>元素表示,在js中表单对应的是HTMLFormElement类型,这个类型也有很多属性和方法:取得表单元素的引用还是为它添加id特性,用DOM操作来获取表单元素:提交表单:把<input>或<button>元素的type特性设置为"submit",图像按钮把<input>元素的type特性设置为"image",也可以调用submit(

java-第十四章-代参的方法(二)-实现MyShopping系统的添加会员功能

 package com.wxws.sms; public class Customer {  int No;  int integarl; } package com.wxws.sms; public class Customers {  Customer[] customers = new Customer[100];  public void add(Customer cust){   for (int i = 0; i <customers.length; i++) {    if (c

java-第十四章-代参的方法(二)-查找会员积分

 package com.wxws.smsB; public class Customer {  int No;  int integarl; } package com.wxws.smsB; public class Customers {  Customer[] customers = new Customer[100];  public void add(Customer cust) {   for (int i = 0; i < customers.length; i++) {    i

R in action读书笔记(19)第十四章 主成分和因子分析

第十四章:主成分和因子分析 本章内容 主成分分析 探索性因子分析 其他潜变量模型 主成分分析(PCA)是一种数据降维技巧,它能将大量相关变量转化为一组很少的不相关变量,这些无关变量称为主成分.探索性因子分析(EFA)是一系列用来发现一组变量的潜在结构的方法.它通过寻找一组更小的.潜在的或隐藏的结构来解释已观测到的.显式的变量间的关系. PCA与EFA模型间的区别 主成分(PC1和PC2)是观测变量(X1到X5)的线性组合.形成线性组合的权重都是通过最大化各主成分所解释的方差来获得,同时还要保证个

c++第十四章-(类型强转换)

类型强转换有2种. class Company { public: Company(std::string theName,std::string theProduct); virtual void printInfo(); protected: std::string name; std::string product; }; Company::Company(std::string theName,std::string theProduct) { this->name = theName;