java多线程

来源:互联网 发布:方坦纳欧洲经济史知乎 编辑:程序博客网 时间:2024/06/06 03:08

java多线程在安卓应用开发中占据着重要的地位,一个应用程序到底性能如何与程序设计的架构,线程的设计有着密不可分的关系。

两种方法实现多线程

1、继承Thread类

2、实现runable接口

一、继承Thread类

Thread类的实现:

public class firstThread extends Thread {private String name;public  firstThread(){this.name = name;}public   firstThread(String name){this.name = name;}public void run(){for(int i=0;i<100;i++){System.out.println(this.name+i+"");}}}

public class firstThread extends Thread {
private String name;
public  firstThread(){
this.name = name;
}
public   firstThread(String name){
this.name = name;
}
public void run()
{
for(int i=0;i<100;i++)
{
System.out.println(this.name+i+"");
}

}

}


main函数中调用

</pre></p><p>执行结果</p><p>A 0A 1B0A 2A 3B1A 4B2B3B4B5B6A 5A 6A 7A 8A 9B7B8B9</p><p>可以看到程序不是顺序执行的,而是两个线程同时执行的,并且每次程序执行的结果都不一样。</p><p>注意:多线程程序的执行需要本地操作系统的支持,这里使用start而不是run,如果使用run,则是直接调用run函数,程序时顺序执行的,达不到多线程的效果。</p><p>二、实现runnable接口</p><p>类实现文件</p><p><pre name="code" class="java">public class hello implements Runnable{private String name;public hello(){}public hello(String name){this.name = name;}@Overridepublic void run() {// TODO Auto-generated method stubfor(int i=0;i<10;i++){System.out.println(name+""+i);}}}

main文件

public class main {public static void main(String[] args) {// TODO Auto-generated method stubfirstThread th1 = new firstThread("A");firstThread th2 = new firstThread("B");th1.start();th2.start();hello th3 = new hello("C");hello th4 = new  hello("D");Thread demo1 =  new Thread(th3);Thread demo2 = new Thread(th4);demo1.start();      //demo1 demo2多线程执行demo2.start();}}
从执行结果可以看出,这四个线程 :th1 th2 demo1 demo2是同时执行的。


三、继承Thread和 实现runnable接口的区别

如果一个类继承Thread,则不适合资源共享;如果实现runnable接口,则很容易实现资源共享。

实现Runnable接口比继承Thread类所具有的优势:

1):适合多个相同的程序代码的线程去处理同一个资源(比如多个线程公用一个资源:如剩余票数等,应该是多个线程共有的,但应该是static变量才会是多个线程共有的资源)

2):可以避免java中的单继承的限制

3):增加程序的健壮性,代码可以被多个线程共享,代码和数据独立。

因此建议使用runnable接口来实现,而不是用继承Thread类的方法。

/** * @author Rollen-Holt  * 取得线程的名称 * */class hello implements Runnable {    public void run() {        for (int i = 0; i < 3; i++) {            System.out.println(Thread.currentThread().getName());        }    }     public static void main(String[] args) {        hello he = new hello();        new Thread(he,"A").start();        new Thread(he,"B").start();        new Thread(he).start();    }}

【运行结果】:


A


A


A


B


B


B


Thread-0


Thread-0


Thread-0


说明如果我们没有指定名字的话,系统自动提供名字。


提醒一下大家:main方法其实也是一个线程。在java中所以的线程都是同时启动的,至于什么时候,哪个先执行,完全看谁先得到CPU的资源。


 


在java中,每次程序运行至少启动2个线程。一个是main线程,一个是垃圾收集线程。因为每当使用java命令执行一个类的时候,实际上都会启动一个JVM,每一个jVM实习在就是在操作系统中启动了一个进程。




四、线程sleep,join,yield
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 慢性胃炎引起的口臭怎么办 烂牙引起的口臭怎么办 坏牙引起的口臭怎么办 牙齿拔了有口臭怎么办 胃疼连着后背疼怎么办 肚脐眼又红又痒怎么办 三岁宝宝有口臭怎么办 脚扭了按压疼痛怎么办 喝完酒头晕5天了怎么办 三岁宝宝口气重怎么办 肠镜检查出息肉怎么办 怀孕了口气很重怎么办 脚被重物压肿了怎么办 摔倒膝盖肿了应该怎么办 脚挤压伤肿了怎么办 30岁后脸上长斑怎么办 12岁脸上有雀斑怎么办 16岁脸上有斑怎么办 脸上有斑怎么办 教你 4o岁脸上有色斑怎么办 小孩三年级成绩都差怎么办 孕晚期头大腿短怎么办 天天p图格式不对怎么办 橡胶枕头太高了怎么办 信用卡多存的钱怎么办 异地三险离职了怎么办 不小心吃了沥青怎么办 快递爆仓怎么办怎么分 爱养成4酒二借钱怎么办 村里的非农户口怎么办 炖排骨肉老发硬怎么办 u盾密码忘了怎么办 创维电视不清晰怎么办 电视的屏幕裂了怎么办 种植牙牙根掉了怎么办 50多岁牙齿脱落怎么办 泡脚的木桶漏水怎么办 隔水炖锅有声音怎么办 电气两用灶坏了怎么办 蒸的米饭水多了怎么办 红掌花叶子发黄怎么办