黑马程序员-----java多线程的学习

来源:互联网 发布:安徽省大数据比赛 编辑:程序博客网 时间:2024/05/22 01:40

---------------------- android培训、java培训、期待与您交流! -----------------------

早就听说andriod的开发要用到多线程的技术,甚至是android开发的非常重要的核心技术

看来要引起重视,扎扎实实学习一下了。

学习完了之后,发现其中的线程调度给人的印象蛮深刻的,下面是自己做的小实验

public class MyThread implements Runnable {
@Override
public void run() {
for (int i = 0; i < 5; i++) {

System.out.println(Thread.currentThread().getName() + "正在运行" );
}
}
}


  public static void main(String[] args) {
MyThread mt=new MyThread();
Thread t1=new Thread(mt);
Thread t2=new Thread(mt);
Thread t3=new Thread(mt);
Thread t4=new Thread(mt);
Thread t5=new Thread(mt);
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
}

}
执行结果为:
Thread-2正在运行

Thread-2正在运行

Thread-2正在运行

Thread-0正在运行
Thread-1正在运行

有意思吧,线程的运行和我们书写语句的顺序居然没有关系!!!

甚至是你再次运行程序的时候,会发现,居然出现一个新的顺序!!!

原来,当线程进行运行时,是由jvm的线程调度器来决定那个线程先执行,那个后执行的

如果你想要顺序执行,可采用的方法是第一,加上同步锁synchronized,一次只能一个访问,直到它释放同步锁为止

比如上面的语句可以这样来写,结果就会变成顺序的了

public synchronized void run() {
for (int i = 0; i < 5; i++) {
if (ticket > 0) {
System.out.println(Thread.currentThread().getName() + "正在运行" );
}
}
}

当然也有第二种方法,就是设定线程的优先级,这个我没有试验,有时间试验之后

在来谈谈经验

--------------------- android培训、java培训、期待与您交流! ----------------------

原创粉丝点击