大四实习准备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 开发相关经验了,自认为并不是技术很厉害的人,但是也有一点个人的经验,希 ...
随机推荐
- 在AWS上安装laravel框架
博客已经迁移到www.imyzf.com,本站不再更新,请谅解! Laravel是现在非常热门的PHP框架,这几天我试着在亚马逊AWS的服务器上安装Laravel,遇到很多问题,最后还是成功了.我的系 ...
- ubuntu下下载并安装H265(hm.x.x代码和X265代码)
H265,现今是High Efficiency Video Coding的别称,详细的概述见维基百科,详细的开发见官方网站. 一.下载并编译官方的测试源码HM.x.x: 1 ubuntu下安装svn: ...
- 1067. Sort with Swap(0,*) (25)
时间限制 150 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Given any permutation of the num ...
- PIL 安装
1.安装依赖包 1.1 ubuntu安装 apt-get install python-devapt-get install libjpeg-dev apt-get install libjpeg8- ...
- android include中的控件调用
项目中经常会有一些布局是重用的,但是如何来更好的利用这些布局中的控件 转: http://zhidao.baidu.com/link?url=GU93U8Wu31dfp7mKEx52hMJkxjFLC ...
- 2016 系统设计第一期 (档案一)MVC a标签 跳转 Html.ActionLink的用法
html: <a class="J_menuItem" href="baidu.com">权限管理</a> cshtml: 原有样式: ...
- 用上新的电脑装上了VS2013了
今天老魏终于把配置好的电脑拿回来了,16G的内存,I7 4770CPU.这回啊,老魏终于可以舍弃我的本本了,装上了SQL Server,虚拟机等等运行高内存的程序,感觉就是爽.明天老魏就可以用VS20 ...
- js高级技巧笔记(一)
安全的类型检测 Js的类型检测机制并非完全可靠,发生错误否定及错误肯定的情况也不少: 在safari 在对正则表达式应用typeof操作符时返回"function",因此很难确定某 ...
- DOCTYPE html PUBLIC 指定了 HTML 文档遵循的文档类型定义
DOCTYPE html PUBLIC 指定了 HTML 文档遵循的文档类型定义 今天看到一篇CSS应用的一个友好搜索,我按网页上的代码复制.粘贴后预览时总达不到效果,而直接拷贝他的实例却能达到效果, ...
- jquery mobile validation
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content ...