java之多线程认识

多线程实现有两个类:
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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值