大四实习准备3_java多线程
4.25、27无耻地懒散了。。。。。26号陪女朋友去了。今天28号,继续加油!
2015-4-28
Java 多线程
(java中类不能多继承,可以多层继承;接口则都可以)
定义和创建:
方法一:继承Thread类
方法二:实现Runnable接口(以匿名内部类的方式来实现也行)
;
启动线程:
线程只能被启动一次,多次启动线程,即多次调用start方法时,会发生IllegalThreadStateException异常;
//以上综合来个code
class xianCheng1 extends Thread{
public void run(){
for(int i=0;i<1000;i++)
System.out.println("通过继承Thread定义线程");
}
}
class xianCheng2 implements Runnable{
public void run(){
for(int i=0;i<1000;i++)
System.out.println("通过实现Runnable接口定义线程");
}
}
public class test{
public static void main(String[] args){
xianCheng1 xc1 = new xianCheng1();//通过继承Thread创建线程对象是比较简单的
xianCheng2 _xc2 = new xianCheng2();
Thread xc2 = new Thread(_xc2);//通过实现Runnable接口创建线程对象就稍微复杂了下
xc1.start();
xc2.start();//是用start()方法,而不是直接调用run()方法,否则就当是普通的函数调用。
new Thread(new Runnable(){
@Override
public void run() {
for(int i=0;i<1000;i++)
System.out.println("通过匿名内部类的方式实现Runnable接口来定义线程");
}
}).start();//或者直接通过匿名内部类的方式实现Runnable接口来定义线程
}
}
例1
线程的生命周期:
线程调度:
(join()方法的状态变化?另外,stop()方法应当也是从运行态变成死亡态)
1.睡眠方法
运行态,调用sleep(time)方法后,进入阻塞态。然后经过time时间后,进入准备态,等待系统调度。再经过一个随机(?应当是的)的时间,重新进入运行态。(从阻塞态到运行态:经过总时间是time+随机)
//函数声明
public static void sleep(long millis)throws InterruptedException;
public static void sleep(long millis,int nanos)throws InterruptedException;
//code必须进行异常处理,否则运行时会发生异常"未报告的异常..." 静态方法,与对象无关
可以通过sleep()方法,实现两个线程交替执行。
class xianCheng1 extends Thread{
public void run(){
for(int i=0;i<10;i++){
System.out.println("通过继承Thread定义线程");
//新增部分:
try{
Thread.sleep(100);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
class xianCheng2 implements Runnable{
public void run(){
for(int i=0;i<10;i++){
System.out.println("通过实现Runnable接口定义线程");
//新增部分:
try{
Thread.sleep(100);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
public class test{
public static void main(String[] args){
xianCheng1 xc1 = new xianCheng1();//通过继承Thread创建线程对象是比较简单的
xianCheng2 _xc2 = new xianCheng2();
Thread xc2 = new Thread(_xc2);//通过实现Runnable接口创建线程对象就稍微复杂了下
xc1.start();
xc2.start();//是用start()方法,而不是直接调用run()方法,否则就当是普通的函数调用。
}
}
例2
2.线程优先级
从1到10,数字越大、优先级越高。默认的优先级为5。子线程的优先级与父线程相同。
Thread类中有3个表示优先级的常量,MAX_PRIORITY,NORM_PRIORITY,MIN_PRIORITY。
public final void setPriority(int i);
3.让步方法
3.1 yield让步方法 使线程让出当前cpu,进入准备状态,而之后执行哪个线程是不确定的,有系统来选择,有可能还是这个线程。
可以通过yield()方法,实现两个线程交替执行。
public static void yield();
//code 静态方法,与对象无关
class xianCheng1 extends Thread{
public void run(){
for(int i=0;i<100;i++){
System.out.println("通过继承Thread定义线程");
//改变部分:
Thread.yield();
}
}
}
class xianCheng2 implements Runnable{
public void run(){
for(int i=0;i<100;i++){
System.out.println("通过实现Runnable接口定义线程");
//改变部分:
Thread.yield();
}
}
}
public class test{
public static void main(String[] args){
xianCheng1 xc1 = new xianCheng1();//通过继承Thread创建线程对象是比较简单的
xianCheng2 _xc2 = new xianCheng2();
Thread xc2 = new Thread(_xc2);//通过实现Runnable接口创建线程对象就稍微复杂了下
xc1.start();
xc2.start();//是用start()方法,而不是直接调用run()方法,否则就当是普通的函数调用。
}
}
例3
3.2 join让步方法 将当前线程的cpu资源让步给指定的线程
//函数声明,及有参数函数的意义?(?认为是执行这么长的时间,然后该线程退出cpu,开始和别的线程并发)
public final void join()throws InterruptedException;
public final void join(long millis)throws InterruptedException;
public final void join(long millis,int nanos)throws InterruptedException;
//code 必须进行异常处理
class xianCheng1 extends Thread{
public void run(){
for(int i=0;i<1000;i++)
System.out.println("通过继承Thread定义线程");
}
}
public class test{
public static void main(String[] args){
xianCheng1 xc1 = new xianCheng1();
xc1.start();
try{
xc1.join();
//xc1.join(1);
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println("The End");
}
}
例4
大四实习准备3_java多线程的更多相关文章
- 实习培训——Java多线程(9)
实习培训——Java多线程(9) 很适合新手 http://www.cnblogs.com/GarfieldEr007/p/5746362.html http://www.cnblogs.com/Ga ...
- 大四实习准备6_android服务
2015-5-9 1.服务是什么 android四大组件之一,有一些特点: 1)服务的运行不依赖于用户界面,即使程序被切换到后台.或者用户打开了另外一个应用程序,服务仍然能够保持正常运行.(当对应的程 ...
- 大四实习准备5_android广播机制
2015-5-1 android 广播机制 5.1简介 分为标准广播(Normal broadcasts)(无先后顺序,几乎同时接收,不可截断)和有序广播(Ordered broadcasts)(有先 ...
- 大四实习准备4_java内部类
2015-4-30 [昨天又可耻地休息了一天,懒劲比较大啊.跟懒劲有直接关系,这几天对幸福的感知也黯淡了,对未来的幸福不是那么渴望了.表现在对亲情和爱情上. 我想生活的本意是积极进取.茁壮生长并时常感 ...
- 大四实习准备2_java异常处理_android控件练习
2015-4-24 Java 异常处理 可以有多个catch;ArrayIndexOutOfBoundsException类是Exception类的子类RuntimeException类的一个间接子类 ...
- 大四实习准备1_java构造器_android ListView
2015-4-23 Java构造器 与类名同名;无返回值(void也不行);被不同的修饰符修饰是有区别的;当构造函数被private修饰时,只有本类可访问.其他类可以通过该类的get函数得到对象.如单 ...
- volatile关键字的作用、原理
在只有双重检查锁,没有volatile的懒加载单例模式中,由于指令重排序的问题,我确实不会拿到两个不同的单例了,但我会拿到"半个"单例. 而发挥神奇作用的volatile,可以当之 ...
- 面试题:volatile关键字的作用、原理
在只有双重检查锁,没有volatile的懒加载单例模式中,由于指令重排序的问题,我确实不会拿到两个不同的单例了,但我会拿到“半个”单例. 而发挥神奇作用的volatile,可以当之无愧的被称为Java ...
- .net 经验总结
先做个自我介绍,我是 2015 年大四实习开始学习的 .net,如果从 2016 年毕业开始算,到目前为止已有 5 年的 web 开发相关经验了,自认为并不是技术很厉害的人,但是也有一点个人的经验,希 ...
随机推荐
- Javascript倒计时页面跳转
在js中实现页面定时跳转我们要使用setInterval或setTimeOut函数,还可以使用页面的meta实现. 例1: <script type="text/javascript& ...
- CentOS7安装性能监控系统
目录 系统描述. 开发环境. 开始之前. 安装influxdb数据库. 安装collectd 安装Grafana FAQ influxdb的web界面没反应. 系统描述 想打造 New ...
- Matlab生成动态链接库供C#调用
1.首先在Matlab中编写一个或几个.m文件 2.然后在命令空间中输入命令:deploytool 3.修改工程名称,修改需要生成文件后缀 4.添加类,添加文件,然后点击生成.
- ios 保存本地数据的方法
1. NSString *path = [[NSBundle mainBundle] pathForResource:@"文件名" ofType:@"plist" ...
- (转)为什么adrl r2,mem_cfg_val这里不用ldr r2,=mem_cfg_val
网址:http://blog.csdn.net/glorin/article/details/6327083 memsetup:mov r1, #MEM_CTL_BASEadrl r2,mem_cfg ...
- NodeJS用递归实现异步操作的链式调用,完成一个简易的命令行输入输出REPL交互接口
REPL —— Read-Eval-Print-Loop. 00.一门好的编程语言的必要条件 REPL并不是什么高大上的东西,简单的说就是一个从命令行程序,读取终端输入,处理,打印结果,如此循环.这是 ...
- 1064: [Noi2008]假面舞会 - BZOJ
Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具.每个面具都有一个编号,主办 ...
- BZOJ 1589: [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果
Description 每年万圣节,威斯康星的奶牛们都要打扮一番,出门在农场的N(1≤N≤100000)个牛棚里转悠,来采集糖果.她们每走到一个未曾经过的牛棚,就会采集这个棚里的1颗糖果. 农场不大, ...
- TDD 实践过程
聚合根是唯一能够允许充当进入聚合的逻辑途径的实体. 是唯一能够允许聚合外的对象持有的引用成员. 聚合根--决定数据库的入口,以为:
- uva 10105
数学 杨辉三角 多项式系数 #include <cstdio> int f[13] = {1}; void init() { for (int i = 1; i < 13; i+ ...