java之多线程认识
来源:互联网 发布:vb 无符号长整型 编辑:程序博客网 时间:2024/05/17 04:08
多线程实现有两个类:
Thread类 多线程操作类 继承Thread类 覆写run方法
class 类名称 extend Thread{
属性
方法
public void run(){
线程主体
}
结果
其实可以看出Runnable 后面还是实例化了 Thread对象了 调用了start方法
Thread类 多线程操作类 继承Thread类 覆写run方法
class 类名称 extend Thread{
属性
方法
public void run(){
线程主体
}
}
测试代码
package ThreadTest;class MyThread extends Thread{private String name;public MyThread(String name) {super();this.name = name;}public void run() {//覆写run 方法 作为线程 的操作主体for (int i = 0; i < 10; i++) {System.out.println(name+"运行,i="+i);}}}public class test1 {public static void main(String[] args) {MyThread mt1=new MyThread("线程A");MyThread mt2=new MyThread("线程B");mt1.run();mt2.run();}}
结果
可以看出来 并没有并发 这是最古老的写法,如果改成 start方法 结果就会并发 谁抢 就会先运行
(2)实现 runnable接口
我们也可以从实现接口的形式 实现多线程 Runnable 只定义了一个抽象方法
public void run();
class 类名称 implement Runnable{
属性....;
方法.....;
public void run(){ //覆写run方法
线程主体
}
}
测试代码
package ThreadTest;class MyThread implements Runnable{private String name;public MyThread(String name) {this.name = name;}public void run() {//覆写run 方法 作为线程 的操作主体for (int i = 0; i < 10; i++) {System.out.println(name+"运行,i="+i);}}}public class test1 {public static void main(String[] args) {MyThread mt1=new MyThread("线程A");MyThread mt2=new MyThread("线程B");Thread tq=new Thread(mt1);//实例化Thread对象Thread tw=new Thread(mt2);tq.start();tw.start();}}
其实可以看出Runnable 后面还是实例化了 Thread对象了 调用了start方法
结果
已经实现了并发
3.Thread类与Runnable接口的联系
因为这个联系 最好是用一个卖票系统来演示
Thread 和Runnable的区别 就是共享资源
先看thread
package ThreadTest;class MyThread implements Runnable{private int ticket=5;public void run() {for (int i = 0; i < 100; i++) {if (this.ticket>0) {System.out.println("卖票:ticket"+ticket--);}}}}public class test1 {public static void main(String[] args) {MyThread mt1=new MyThread();//实例化对象MyThread mt2=new MyThread();MyThread mt3=new MyThread();mt1.run();//调用线程主体mt2.run();mt3.run();}}
总共15张票
如果用Runnable 就会卖出5张票
package ThreadTest;class MyThread implements Runnable{private int ticket=5;public void run() {for (int i = 0; i < 100; i++) {if (this.ticket>0) {System.out.println("卖票:ticket"+ticket--);}}}}public class test1 {public static void main(String[] args) {/*MyThread mt1=new MyThread();//实例化对象MyThread mt2=new MyThread();MyThread mt3=new MyThread();mt1.run();//调用线程主体mt2.run();mt3.run();对比一下*/MyThread mt=new MyThread();//实例化对象//调用了三条线称new Thread(mt).run();new Thread(mt).run();new Thread(mt).run();}}
Thread类与Runnable接口
实现Runnable接口的明显有点
适合多个相同程序代码的线程去处理同一个资源
可以便面由于单继承局限所带来的影响
增强了程序的健壮性 代码能被多个线程共享 代码与数据是独立的
模板代码
创建状态:准备好了一个多线程对象 Thread t=new Thread();
就绪状态 调用start()方法 等待cpu的调度
运行状态:执行run()
阻塞状态:暂时停止执行 可能会把资源给其他使用
终止状态:线程执行完。不再使用
0 0
- java之多线程认识
- 【Java】Java之多线程
- Java学习之多线程
- java基础教程之多线程
- java之多线程
- Java学习之多线程
- java基础之多线程
- Java之多线程
- java基础之多线程
- Java基础之多线程
- JAVA之多线程
- java之多线程
- Java之多线程编程
- java面试之多线程
- java之多线程实例
- java基础之多线程
- java基础之多线程
- Java基础之多线程
- OpenCV基础篇之像素操作对比度调节
- Java历史及其介绍
- DSP/BIOS使用之初窥门径——滴答时钟及烧写Flash
- 平衡二叉树
- PCB设计资料:看到最后才知道是福利
- java之多线程认识
- LabVIEW上位机与串口通信
- VC CComboBox用法
- CentOS配置smaba与Windows共享文件
- 最小组合问题
- 安装php时遇到的问题
- 三极管的电平转换及驱动电路分析
- zoj 3471 状态压缩dp
- 臭美发型达人秀