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多线程的更多相关文章

  1. 实习培训——Java多线程(9)

    实习培训——Java多线程(9) 很适合新手 http://www.cnblogs.com/GarfieldEr007/p/5746362.html http://www.cnblogs.com/Ga ...

  2. 大四实习准备6_android服务

    2015-5-9 1.服务是什么 android四大组件之一,有一些特点: 1)服务的运行不依赖于用户界面,即使程序被切换到后台.或者用户打开了另外一个应用程序,服务仍然能够保持正常运行.(当对应的程 ...

  3. 大四实习准备5_android广播机制

    2015-5-1 android 广播机制 5.1简介 分为标准广播(Normal broadcasts)(无先后顺序,几乎同时接收,不可截断)和有序广播(Ordered broadcasts)(有先 ...

  4. 大四实习准备4_java内部类

    2015-4-30 [昨天又可耻地休息了一天,懒劲比较大啊.跟懒劲有直接关系,这几天对幸福的感知也黯淡了,对未来的幸福不是那么渴望了.表现在对亲情和爱情上. 我想生活的本意是积极进取.茁壮生长并时常感 ...

  5. 大四实习准备2_java异常处理_android控件练习

    2015-4-24 Java 异常处理 可以有多个catch;ArrayIndexOutOfBoundsException类是Exception类的子类RuntimeException类的一个间接子类 ...

  6. 大四实习准备1_java构造器_android ListView

    2015-4-23 Java构造器 与类名同名;无返回值(void也不行);被不同的修饰符修饰是有区别的;当构造函数被private修饰时,只有本类可访问.其他类可以通过该类的get函数得到对象.如单 ...

  7. volatile关键字的作用、原理

    在只有双重检查锁,没有volatile的懒加载单例模式中,由于指令重排序的问题,我确实不会拿到两个不同的单例了,但我会拿到"半个"单例. 而发挥神奇作用的volatile,可以当之 ...

  8. 面试题:volatile关键字的作用、原理

    在只有双重检查锁,没有volatile的懒加载单例模式中,由于指令重排序的问题,我确实不会拿到两个不同的单例了,但我会拿到“半个”单例. 而发挥神奇作用的volatile,可以当之无愧的被称为Java ...

  9. .net 经验总结

    先做个自我介绍,我是 2015 年大四实习开始学习的 .net,如果从 2016 年毕业开始算,到目前为止已有 5 年的 web 开发相关经验了,自认为并不是技术很厉害的人,但是也有一点个人的经验,希 ...

随机推荐

  1. google map 点击获取经纬度

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. webpack减少打包后文件体积的几种方法

    webpack 把我们所有的文件都打包成一个 JS 文件,这样即使你是小项目,打包后的文件也会非常大.下面就来讲下如何从多个方面进行优化. 去除不必要的插件 刚开始用 webpack 的时候,开发环境 ...

  3. php array_walk 和 array_reduce函数

    1.array_walk:将数组中的元素(键+值)依次取出传给处理的函数,函数处理完就完了,没有返回值. $arr1=array( 'name'=>'zhangsan', 'age'=>3 ...

  4. php入门变量

    变量是用于临时存储值的容器.这些值可以是数字.文本,或者是复杂得多的数据. PHP 具有8种变量. 其中包括4种标量(单值)类型——字符串型(字符).整型.浮点型(小数)和布尔型(TRUE或FALSE ...

  5. hibernate的n+1问题

    下面选自<精通Hibernate:Java对象持久化技术详解>作者:孙卫琴 在Session的缓存中存放的是相互关联的对象图.默认情况下,当Hibernate从数据库中加载Customer ...

  6. 给虚拟机中的CentOS7配置固定ip

    在虚拟机中安装完了CentOS7之后,使用了DHCP来获取ip,vmware的网络连接使用了NAT模式.但是在把Linux设置为固定ip地址后,虚拟机里的linux可以ping通全网段的ip地址,但是 ...

  7. ARM-Linux S5PV210 UART驱动(2)---- 终端设备驱动

    在Linux中,UART串口驱动完全遵循tty驱动的框架结构,但是进行了底层操作的再次封装,所以先介绍tty终端设备驱动. 一.终端设备 1.串行端口终端(/dev/ttySACn) 2.伪终端(/d ...

  8. KM3

    本科:读完一本书,知道book里讲的是什么,带有知识吸收: 硕士:读完一本书,知道book里的内容,而且还能发现相关的问题,带有知识的思考: 博士:读完一本书,知道book里的内容,而且还能发现相关的 ...

  9. 50个C++源码学习网站

    C/C++是最主要的编程语言.这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码 .这份清单提供了源代码的链接以及它们的小说明.我已尽力包括最佳的C/C++源代码的网站.这不是一个完整的 ...

  10. (转)Qt Model/View 学习笔记 (七)——Delegate类

    Qt Model/View 学习笔记 (七) Delegate  类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...