Java多线程复习_Java多线程复习

一、线程的基本概念

简单的说:线程就是一个程序里不同的执行路径

在同一个时间点上cpu只会有一个线程在执行

Java里的多线程是通过java.lang.Thread类来实现的

每个线程都拥有自己独立的方法栈空间

二、java线程的创建和启动

第一种

定义线程类实现Runnable接口

Thread myThread = new Thread(target) //target为Runnable接口类型

Runnable中只有一个方法:

public void run();用以定义线程运行体

第二种

可以定义一个Thread的子类并重写其run方法:

clas MyThread extends Thread{

public void run(){}

}

线程类必须通过执行Thread的start()方法启动一个新的线程

如果调用run()方法是属于方法的调用,不会启动一个新的线程

推荐使用第一种方式创建线程,使用接口较为灵活

二、线程状态装换

调用线程start()方法时,线程进入就绪状态,Cpu分配时间片,线程进入运行状态

时间片结束,run()方法未执行完,线程进入阻塞状态。

三、线程控制基本方法

isAlive() //判断线程是否还“活着”,即线程是否还未终止

getPriority() //获得线程的优先级数值

setPriority() //设置线程的优先级指数

Thread.sleep() //静态方法,将当前线程睡眠指定毫秒数

join()  //调用某线程的该方法,将当前线程与该线程合并,即等待该线程结束,再回复当前线程的运行。

yield()  //让出CPU,当前线程进入就绪状态等待调度,并执行其它线程。

interrupt() //中断线程

wait()  //当前线程进入对象的wait pool

notify()/all //唤醒对象的wait pool中的一个或所有等待线程

四、sleep方法 Thread的静态方法

public static void sleep(long millis)throws InterruptedException //必须对异常进行捕捉

Thread.currentThread();  //得到当前线程

五、一种让线程退出的方式(interrupt方法)。

1 importjava.util.*;2 publicclassTestInterrupt{3 publicstaticvoidmain(String[] args){4 MyThread t=newMyThread();5 t.start();6 try{Thread.sleep(10000);}7 catch(InterruptedException i){}8 t.interrupt();9 }10 }11 12 classMyThreadextendsThread{13 publicvoidrun(){14 while(true){15 try{16 System.out.println("------"+newDate()+"-----");17 Thread.sleep(1000);//主线程sleep10秒结束将interrupt该线程的输出18 }catch(InterruptedException i){19 return;20 }21 }22 }23 }

六、join和yield方法

t.join(); //t的run()方法执行完才会继续执行当前线程方法体

t.yield(); //暂停当前正在执行的线程对象,并执行其他线程。方法为静态

1 publicclassTestYield {2 publicstaticvoidmain(String[] args) {3 MyThread3 t1=newMyThread3("t1");4 MyThread3 t2=newMyThread3("t2");5 t1.start(); t2.start();6 }7 }8 classMyThread3extendsThread {9 MyThread3(String s){super(s);}10 publicvoidrun(){11 for(inti=1;i<=100;i++){12 System.out.println(getName()+":"+i);13 if(i%10==0){14 yield();15 }16 }17 }18 }

注意:yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。所以上面的程序不会实现2个线程交替每次输出10个数字!

七、线程优先级别

线程的优先级用数字表示,范围从1到10,一个线程的缺省优先级为5.

Thread.MAX_PRIORITY=1

Thread.MIN_PRIORITY=10

Thread.NORM_PRIORITY=5

例:t.setPriority(Thread.NORM_PRIORITY+3);

★八、线程同步

1.同步代码块

synchronized(this){  //在执行代码块过程中,不会被其他线程打断

...

}

public sunchronized void method //执行此方法时,当前对象被锁定

在Java语言中,引入了对象互斥锁的概念,保证共享数据操作的完整性,每个对象 都对应一个可称为"互斥锁"的标记,这个标记保证在任一时刻,只能有一个线程访 问该对象。

2.生产者、消费者model

1 /*@srchttp://eric-619.javaeye.com/blog/6936812 * 生产者消费者问题其含义就是先生产出了产品,才能拉出去让消费者购买3 * 一、重点:4 * 1、多个线程数据共享区域化思想!---源于多线程的近亲思想!!(类似于静态变量的改变)5 * (如栈内存和对内存,还有当做栈内存和堆内存,如数组和基本数据类型,只要是访问的同一个。)6 * 2、生产者消费者7 *8 * 二、synchronized加锁:9 *10 */11 12 13 publicclassProCon{//主方法14 15 publicstaticvoidmain(String[] args){16 SyncStack stack=newSyncStack();17 Consumer p=newConsumer(stack);18 Producer c=newProducer(stack);19 20 21 newThread(p).start();22 newThread(c).start();23 }24 }25 26 classProducerimplementsRunnable{//生产者27 privateSyncStack stack;28 29 publicProducer(SyncStack stack){30 this.stack=stack;31 }32 33 publicvoidrun(){34 for(inti=0; i

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263884.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML段落自动换行的样式设置

在HTML的P标记中&#xff0c;默认情况下是自动换行的。 如果你的段落是由中文字符或者英文单词组成的&#xff0c;这基本没什么问题。但是如果你的段落是由不间断的英文字母&#xff08;浏览器会认为是一个单词&#xff09;组成&#xff0c;则默认情况下不会换行&#xff0c;将…

DES加密/解密

1 /// <summary>2 /// DES加密(数据加密标准&#xff0c;速度较快&#xff0c;适用于加密大量数据的场合)3 /// </summary>4 /// <param name"EncryptString">待加密的密文</param>5 /// <param name&qu…

Spring中使用Spark连接的DataSource

在Spring中配置Spark hive-thriftserver的连接DataSource与配置其他数据源连接方式是一样的&#xff0c;如一般Oracle数据源配置&#xff0c;使用如下必须的Jar包&#xff1a;使用JDBC程序示例&#xff1a;package com.hadoop.test;import java.sql.Connection; import java.sq…

中文字符匹配java_java正则匹配HTML中a标签里的中文字符示例

java正则匹配HTML中a标签里的中文字符示例发布于 2020-8-12|复制链接摘记: 本文实例讲述了java正则匹配HTML中a标签里的中文字符。分享给大家供大家参考&#xff0c;具体如下&#xff1a;今天群里一位朋友问到了一个正则表达式的问题&#xff0c;有如下内容&#xff1a;xhtml特…

多语言制作工具(2013-01-24更新,支持VS2005、2008、2010、2012)(已开源)

前一段时间&#xff0c;制作了一个多语言资源文件制作工具&#xff0c;现在把这个工具集成到VS2005、VS2008&#xff0c;vs2010中&#xff0c;以增加VS自身资源编辑界面&#xff0c;对多资源编辑的麻烦&#xff0c;简化多语言资源文件的制作。 这个插件是和VS的项目绑定的&…

尚学人工智能课程---1、大数据和人工智能介绍

尚学人工智能课程---1、大数据和人工智能介绍 一、总结 一句话总结&#xff1a; 机器学习是什么&#xff1a;数据背后体现的客观算法&#xff1a;人在电脑上留下的大量日志可以反映人的性格和习惯 深度学习是什么&#xff1a;神经网络如果深度大于3&#xff0c;就是深度学习 神…

Flatten Binary Tree to Linked List (DFS)

Given a binary tree, flatten it to a linked list in-place. For example,Given 1/ \2 5/ \ \3 4 6The flattened tree should look like: 1\2\3\4\5\6代码&#xff1a; class Solution{ public:void flatten(TreeNode *root) {if(rootNULL) return;TreeNode* proot-…

mysql 回表查询优化_MySQL优化:如何避免回表查询?什么是索引覆盖?

转自&#xff1a;https://mp.weixin.qq.com/s?__bizMjM5ODYxMDA5OQ&mid2651962609&idx1&sn46e59691257188d33a91648640bcffa5&chksmbd2d092d8a5a803baea59510259b28f0669dbb72b6a5e90a465205e9497e5173d13e3bb51b19&mpshare1&scene1&srcid&sh…

安装 Windows 自动化 API 3.0 后,Visual Studio 2010 的运行速度更快

安装 Windows 自动化 API 3.0 后&#xff0c;Visual Studio 2010 的运行速度更快 本文适用于以下产品&#xff1a; Microsoft Visual Studio 2010如果未安装 Windows 自动化 API 3.0&#xff0c;则使用 Windows 自动化 API 的应用程序会明显降低 Microsoft Visual Studio Inte…

cocos2d-x3.2创建项目

mac&#xff1a; 1.用终端进入/Users/lixiang/Desktop/cocos2d-x-3.2/tools/cocos2d-console/bin目录执行./cocos.py。 &#xff08;出现Permission denied&#xff0c;是权限问题&#xff0c;可以先使用chmod命令获得权限&#xff0c;输入chmod ux ./cocos.py 回车&#xff0c…

使用ASP.Net WebAPI构建REST服务(一)——简单的示例

由于给予REST的Web服务非常简单易用&#xff0c;它越来越成为企业后端服务集成的首选方法。本文这里介绍一下如何通过微软的Asp.Net WebAPI快速构建REST-ful 服务。 首先创建一个Asp.Net Web应用程序&#xff08;我这里用的是Visual Studio 2013&#xff0c;它已经内置了Web AP…

网页游戏服务器配置

最近要架设一个网页游戏&#xff0c;就到硬件市场配了一台服务器&#xff0c;下面是具体的配置清单&#xff1a; Intel Xeon 5310 1.6G 1350  金士顿4GB DDR2 667(ECC FB DIMM)*2 全缓冲处理内存 680*2  主板 Intel S5000VSA 1750  硬盘 320G SATA*2 450*2   国鑫GX514…

Linux sudo命令详解

Linux sudo命令以系统管理者的身份执行指令&#xff0c;也就是说&#xff0c;经由 sudo 所执行的指令就好像是 root 亲自执行。 使用权限&#xff1a;在 /etc/sudoers 中有出现的使用者。 简单的说&#xff0c;sudo 是一种权限管理机制&#xff0c;管理员可以授权于一些普通用户…

告别花瓶:2015年智能电视路在何方?

智能手机与平板在IT市场风生水起&#xff0c;让几岁小孩到大爷大妈们都对玩手机、平板乐此不彼。曾经辉煌几十年的电视行业&#xff0c;如今又重新融合了智能系统以全新的面貌出现在人们面前。多家互联网企业对这一“翻新”的市场虎视眈眈&#xff0c;并推出了多款智能电视。但…

文件类型

转载于:https://www.cnblogs.com/hlc-123/p/10958326.html

灾备还缺一套评价体系

1月10日&#xff0c;灾备技术产业联盟正式成立。这样一个中立的、由业内众多厂商和大型用户组成的、以服务为宗旨的联盟将为我国灾备技术和应用的规范化发展做出积极贡献。经过一年多的酝酿、历经7次筹备会议&#xff0c;由华为、北京邮电大学、中治研国际信息技术研究院和中国…

DFS知识点

2019-06-01 11:14:34 加油&#xff0c;坚持&#xff01;&#xff01;&#xff01; 1. 2. 3. 转载于:https://www.cnblogs.com/Artimis-fightting/p/10960409.html

Sery送的书与网站短信解决方案

今天Sery&#xff08;http://sery.blog.51cto.com/&#xff09;在qq上说要送我一本他刚写的书《互联网运营智慧》&#xff0c;因为里面引用了我写的一段程序。 #!/usr/bin/perl -w use strict; use LWP::Simple; use URI::Escape; use Digest::MD5; my ($mobile, $content) AR…

兰州财经大学JAVA期末考什么_兰州财经大学大学国文下答案

兰州财经大学大学国文下答案更多相关问题建立HSE管理体系可提高企业安全、环境和健康()。A.管理水平B.操作水平C.使用水平D.能源水平计算机保存矢量图形实际上是存储描述矢量图形的一组绘图指令及有关的参数&#xff0c;因此 矢量图形的存储取样频率、量化精度将影响录制数字音…

Android 反射获取内外置存储卡方法

2019独角兽企业重金招聘Python工程师标准>>> 以前的Android(4.1之前的版本)中&#xff0c;SDcard跟路径通过“/sdcard”或者“/mnt/sdcard”来表示存储卡&#xff0c;而在Jelly Bean系统中修改为了“/storage/sdcard0”&#xff0c;以后可能还会有多个SDcard的情况。…