大四实习准备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 开发相关经验了,自认为并不是技术很厉害的人,但是也有一点个人的经验,希 ...
随机推荐
- google map 点击获取经纬度
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- webpack减少打包后文件体积的几种方法
webpack 把我们所有的文件都打包成一个 JS 文件,这样即使你是小项目,打包后的文件也会非常大.下面就来讲下如何从多个方面进行优化. 去除不必要的插件 刚开始用 webpack 的时候,开发环境 ...
- php array_walk 和 array_reduce函数
1.array_walk:将数组中的元素(键+值)依次取出传给处理的函数,函数处理完就完了,没有返回值. $arr1=array( 'name'=>'zhangsan', 'age'=>3 ...
- php入门变量
变量是用于临时存储值的容器.这些值可以是数字.文本,或者是复杂得多的数据. PHP 具有8种变量. 其中包括4种标量(单值)类型——字符串型(字符).整型.浮点型(小数)和布尔型(TRUE或FALSE ...
- hibernate的n+1问题
下面选自<精通Hibernate:Java对象持久化技术详解>作者:孙卫琴 在Session的缓存中存放的是相互关联的对象图.默认情况下,当Hibernate从数据库中加载Customer ...
- 给虚拟机中的CentOS7配置固定ip
在虚拟机中安装完了CentOS7之后,使用了DHCP来获取ip,vmware的网络连接使用了NAT模式.但是在把Linux设置为固定ip地址后,虚拟机里的linux可以ping通全网段的ip地址,但是 ...
- ARM-Linux S5PV210 UART驱动(2)---- 终端设备驱动
在Linux中,UART串口驱动完全遵循tty驱动的框架结构,但是进行了底层操作的再次封装,所以先介绍tty终端设备驱动. 一.终端设备 1.串行端口终端(/dev/ttySACn) 2.伪终端(/d ...
- KM3
本科:读完一本书,知道book里讲的是什么,带有知识吸收: 硕士:读完一本书,知道book里的内容,而且还能发现相关的问题,带有知识的思考: 博士:读完一本书,知道book里的内容,而且还能发现相关的 ...
- 50个C++源码学习网站
C/C++是最主要的编程语言.这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码 .这份清单提供了源代码的链接以及它们的小说明.我已尽力包括最佳的C/C++源代码的网站.这不是一个完整的 ...
- (转)Qt Model/View 学习笔记 (七)——Delegate类
Qt Model/View 学习笔记 (七) Delegate 类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...