Java 之 多线程编程
1.线程:
a.由来:单任务OS —— 多任务OS
b.进程:每一个进程对应一个应用程序,分配独立内存空间
c.线程:线程是进程内部的一个独立的执行分支
d.特点:共享内容地址空间,切换成本更低
2.线程的创建和启动
a.方法一:(Thread)
①继承Thread类,重写run方法——run方法只负责确定这个线程要做的事情
public class MyThread extends Thread{
public void run() {
}
}
②开启线程,要调用start方法——该方法会为线程分配资源,然后自动调用this.run()
MyThread mt = new MyThread();
mt.start(); //开启线程
③如果调用run方法——不会报错,但只是普通的方法调用,没有开启新线程
b.方法二:(Runnable)
①实现Runnable接口,重写run方法——run方法只负责确定这个线程要做的事情
public class YourThread implements Runnable{
public void run() {
}
}
②创建一个Thread对象,把Runnable接口的实现类对象传入
调用Thread对象的start()
YourThread yt = new YourThread();
Thread th = new Thread(yt);
th.start();
3.线程状态
a.流程:①新建状态(new Thread() 对象)——就绪状态(调用start(),但start()在调用run()之前)——运行状态(start(),调用run())——死亡状态(run()方法结束,进行资源回收清理)
②中断状态:在运行状态中,线程由于种种原因没有得到CPU执行
b.中断状态的五个原因:
①线程的优先级:线程优先级共十级,最高为10,最低为1
优先级高的只是被执行的几率更大,不代表完胜优先级低的
th.setPriority(10); th.setPriority(Thread.MAX_PRIORITY);
②阻塞:由于输入/输出,造成线程进行中断状态(如:Scanner)
③休眠:Thread的sleep方法
th.sleep(500); //传休眠的毫秒数
④等待 与 唤醒:Object 的 wait() 与 notify() 方法
⑤挂起:Thread 的 yield() 方法
4.同步锁
a.关键字:synchronized
b.意义:当多个线程访问同一资源的时候,有可能造成该资源数据混乱。
为保证该资源每次只能被一个线程使用,使用完以后再交给下一个线程,我们要使用同步技术。
c.同步的实现:
①同步方法:在资源身上加同步关键字synchronized
public synchronized void show(String name){
}
②同步块:在调用资源的线程身上使用synchronized
synchronized(this.rs){
this.rs.show(this.getName());
}
Java 之 多线程编程的更多相关文章
- Java的多线程编程模型5--从AtomicInteger开始
Java的多线程编程模型5--从AtomicInteger开始 2011-06-23 20:50 11393人阅读 评论(9) 收藏 举报 java多线程编程jniinteger测试 AtomicIn ...
- Java网络多线程编程:对象流错误导致Connection reset
Java网络多线程编程--对象流错误导致Connection reset 在老韩的网络多线程编程实战项目中,发生了如下报错: 服务器端和客户端均发生了报错,在确定相应对象流代码完全没有问题之后,回归定 ...
- Java socket 多线程编程 示例
参照网上代码: 1.工程: 2.代码: Client.java package com.my.socket.test; import java.io.BufferedReader; import ja ...
- Java基础-多线程编程-1.随便选择两个城市作为预选旅游目标。实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市。分别用Runnable接口和Thread类实现。
1.随便选择两个城市作为预选旅游目标.实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市.分别用Runnable接口和Thread ...
- 【持续更新】JAVA面向对象多线程编程的一些tips
sleep()和wait()的区别 sleep()方法是Thread类的方法,wait()方法是Object类的方法. 调用sleep()方法的过程中,线程不会释放对象锁,睡眠时间一过,就又开始执行. ...
- 初识Java多线程编程
Java 多线程编程 Java给多线程编程提供了内置的支持.一个多线程程序包含两个或多个能并发运行的部分.程序的每一部分都称作一个线程,并且每个线程定义了一个独立的执行路径. 多线程是多任务的一种特别 ...
- java核心-多线程-Java多线程编程涉及到包、类
Java有关多线程编程设计的类主要涉及两个包java.lang和java.util.concurrent两个包 java.lang包,主要是线程基础类 <1>Thread <2> ...
- Java基础知识➣多线程编程(五)
概述 Java 给多线程编程提供了内置的支持.一个多线程程序包含两个或多个能并发运行的部分.程序的每一部分都称作一个线程,并且每个线程定义了一个独立的执行路径.使用多线程也是为了充分的利用服务器资源, ...
- Java之旅_高级教程_多线程编程
摘自:http://www.runoob.com/java/java-multithreading.html Java 多线程编程 Java 给多线程编程提供了内置的支持.一条线程指的是进程中的一条执 ...
随机推荐
- fastReport 运行时设计报表 (mtm)
设计报表 通过“TfrxReport.DesignReport”方法调用报表设计器.你必须在你的项目中包含报表设计器 (必要条件是:要么使用“TfrxDesigner”组件,要么增加“frxDesgn ...
- 创建odoo数据库时出现错误原因
安装完odoo 8.0后创建数据库时出现如下错误信息: Odoo Odoo Server Error Traceback (most recent call last): File "D:\ ...
- 让view 覆盖导航栏
当我们想做一个弹出式菜单时,想将导航栏也一起盖住不显示的话,可以用如下语句实现: UIView* myView = /* 你自定义的view */; UIWindow* currentWindow = ...
- 数的统计count(bzoj1036)
Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w.我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. Q ...
- Mysql Condition /Handler(异常处理)
关于介绍,可参见:http://www.cnblogs.com/end/archive/2011/04/01/2001946.html. http://blog.csdn.net/rdarda/art ...
- Linuxc:创建与监控多个子进程
#include <unistd.h> #include <sys/types.h> #include <stdlib.h> #include <signal ...
- JS打造的跟随鼠标移动的酷炫拓扑图案
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- db2 Hidden columns
When a table column is defined with the implicitly hidden attribute, that column is unavailable unle ...
- JavaScript基础——数据类型
JavaScript使用数据类型来确定如何处理被分配给一个变量的数据.变量的类型决定了你可以对变量进行什么操作,如循环或者执行.下面描述了最常用的变量类型. 字符串(String):此数据类型将字符数 ...
- 三、jQuery--Ajax基础--Ajax全接触--jQuery中的AJAX
用jQuery实现Ajax jQuery.ajax([settings]) type:类型,“POST”或“GET”,默认为“GET” url:发送请求的地址 data:是一个对象,连同请求发送到服务 ...