java之多线程认识

来源:互联网 发布:vb 无符号长整型 编辑:程序博客网 时间:2024/05/17 04:08
多线程实现有两个类:
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
原创粉丝点击