java多线程技术(一)
来源:互联网 发布:ooa ood oop编程思想 编辑:程序博客网 时间:2024/05/18 13:47
多线程技术的优点就是提高系统的运行效率
这里我解释一下:我拿QQ作例子,QQ里有很多功能,例如:发送信息、视频通话、截图等等,假如QQ是单任务执行,也就是说我们在使用发送信息这个功能的时候不能使用视频通话、截图等等的功能,只能在发送信息完成后我们才能使用其他功能,那我估计没人会使用QQ这款软件。这时候就需要多线程技术,使得我们能在同一时刻使用多个功能。
java的多线程有两种形式:
一、继承Thread类
二、实现Runnable接口
package Java_test;public class Test {public static void main(String[] args) {Mythread mt = new Mythread();mt.setName("mt");mt.start();Myrunnable mr = new Myrunnable();Thread thread = new Thread(mr);thread.setName("thread");thread.start();}}class Mythread extends Thread {public void run() {// TODO Auto-generated method stubSystem.out.println("" + Thread.currentThread().getName());}}class Myrunnable implements Runnable {public void run() {// TODO Auto-generated method stubSystem.out.println("" + Thread.currentThread().getName());}}
注意:多线程是异步的,线程被调用的时机是随机的。
这里我得补充一下,java进程里至少存在一个main线程,而这个线程就是调用main()方法的,他是由JVM创建的。
使用Thread与Runnable的区别:
在大多数情况下我们都选择使用Runnable,因为使用Thread有局限性,我举个很经典的例子:卖票
package Java_test;public class Test {public static void main(String[] args) {Mythread mt0 = new Mythread();mt0.setName("mt0");Mythread mt1 = new Mythread();mt1.setName("mt1");Mythread mt2 = new Mythread();mt2.setName("mt2");mt0.start();mt1.start();mt2.start();}}<pre name="code" class="java">class Mythread extends Thread {int count = 5;public void run() {// TODO Auto-generated method stubwhile (count > 0) {count--;System.out.println(Thread.currentThread().getName() + " 卖了一张票,还有 "+ count + " 张票");}}}
运行结果:mt2 卖了一张票,还有 4 张票mt1 卖了一张票,还有 4 张票mt2 卖了一张票,还有 3 张票mt0 卖了一张票,还有 4 张票mt2 卖了一张票,还有 2 张票mt2 卖了一张票,还有 1 张票mt1 卖了一张票,还有 3 张票mt0 卖了一张票,还有 3 张票mt1 卖了一张票,还有 2 张票mt0 卖了一张票,还有 2 张票mt1 卖了一张票,还有 1 张票mt0 卖了一张票,还有 1 张票
从运行结果可以看出,每个Thread对象都是操作的是不同的count,没有实现共享数据。
我们再看个例子
package Java_test;public class Test {public static void main(String[] args) {Myrunnable mr = new Myrunnable();Thread mt0 = new Thread(mr);mt0.setName("mt0");Thread mt1 = new Thread(mr);mt1.setName("mt1");Thread mt2 = new Thread(mr);mt2.setName("mt2");mt0.start();mt1.start();mt2.start();}}class Myrunnable implements Runnable {int count = 5;synchronized public void run() {// TODO Auto-generated method stubwhile (count > 0) {count--;System.out.println(Thread.currentThread().getName() + " 卖了一张票,还有 "+ count + " 张票");}}}
运行结果:mt0 卖了一张票,还有 4 张票mt0 卖了一张票,还有 3 张票mt0 卖了一张票,还有 2 张票mt0 卖了一张票,还有 1 张票mt0 卖了一张票,还有 0 张票
这里我们涉及一个关键词synchronized
synchronized:
这是一个上锁的概念,可以给对象或者方法上锁,目的是线程安全。
synchronized修饰的对象或者方法,在多个线程调用的时候发挥重要作用,例如:
当一个线程a调用某方法的时候,就会给这个方法上锁,其他的线程b调用的时候,就不能调用,这线程b会持续尝试调用其方法,直到可以调用,当线程a调用其方法完成后,才会解锁其方法使得其他的线程可以调用。
下篇文章:java多线程技术(二)
http://blog.csdn.net/x_i_a_o_hei/article/details/52249692
0 0
- java多线程技术(一)
- java多线程技术一
- Java多线程技术学习笔记(一)
- Java线程及多线程技术及应用(一)
- java多线程:多线程(一)
- java技术深入(一)——java多线程(一)——基本概念
- 【JAVA秒会技术之玩转多线程】多线程那些事儿(一)
- JAVA多线程技术学习笔记(一)——多线程基本概念
- Java--多线程(一)
- java(多线程 一)
- JAVA多线程(一)
- java多线程(一)
- Java多线程(一)
- Java多线程(一)
- java多线程(一)
- Java多线程(一)
- Java多线程(一)
- java---多线程(一)
- 变色
- loadrunner参数化设置
- 【Python】Python_learning0:python的range()函数用法
- 2016年8月18日 星期四
- C++学习-C++简介1
- java多线程技术(一)
- poj3304Segments+计算几何(二维几何模板)
- HTTP协议详解(真的很经典)
- 使用Reveal查看任意App的技巧
- activity4种启动模式,生命周期的理解
- 进度条
- QUST'S OJ problem 1355 函数实现二维数组的行列转换
- Eclipse:创建项目自动产生appcompat_v7
- hdoj 1045 Fire Net (dfs)