`

线程实现方式extends Thread 和 implements Runnable

阅读更多
  • 线程安全:当多个线程访问同一个类时,这个类始终表现出正确的行为
  • synchronized :可在任意方法或对象上加锁

  一.extends Thread

package com.zan;

public class TestThread extends Thread{

    private int count = 5 ;
	
	//synchronized加锁 ,实现线程同步
    //加锁的这段代码称为:互斥区或临界区
	public void run(){  //也可在直接方法上加synchronized 
		synchronized (this) {			
			count--;
			System.out.println("线程"+currentThread().getName() + " count--> "+ count);
		}
	}
	
	public static void main(String[] args) {
		/**
		 *     当多个线程访问TestThread的run方法时,以排队的方式进行处理(这里排对是按照CPU分配的先后顺序而定的),
		 * 		一个线程想要执行synchronized修饰的方法里的代码:
		 * 		1 首先要获得锁
		 * 		2 若是拿到锁,执行synchronized代码体内容;拿不到锁,这个线程就会不断的尝试获得这把锁,直到拿到为止,
		 * 		   而且是多个线程同时去竞争这把锁。(也就是会有锁竞争的问题)
		 */
		TestThread thread = new TestThread();
		Thread t1 = new Thread(thread,"t1");
		Thread t2 = new Thread(thread,"t2");
		Thread t3 = new Thread(thread,"t3");
		Thread t4 = new Thread(thread,"t4");
		Thread t5 = new Thread(thread,"t5");
		t1.start();
		t2.start();
		t3.start();
		t4.start();
		t5.start();
	
	}
}

 

二.implements Runnable

 

package com.zan;

public class TestThread2 implements Runnable{

	private int count = 5 ;
	@Override
	public synchronized void run() {
		count--;
		System.out.println("线程"+Thread.currentThread().getName() + " count--> "+ count);
	}
	
	public static void main(String[] args) {
		
		TestThread2 thread = new TestThread2();
		Thread t1 = new Thread(thread,"t1");
		Thread t2 = new Thread(thread,"t2");
		Thread t3 = new Thread(thread,"t3");
		Thread t4 = new Thread(thread,"t4");
		Thread t5 = new Thread(thread,"t5");
		t1.start();
		t2.start();
		t3.start();
		t4.start();
		t5.start();
	
	}

}

 

Runnable比Thread好:1.适合资源共享  2.java只能单继承,但可以实现多个接口。避免继承的局限

   

 

0
0
分享到:
评论

相关推荐

    基础深化和提高-Java多线程技术

    在Java中,实现多线程有几种方式: 继承Thread类:创建一个类继承自java.lang.Thread类,并重写run()方法来定义线程的执行逻辑。然后可以创建该类的实例并调用start()方法启动线程。 java class MyThread extends ...

    java用线程两种方式

    * 分别使用Runnable接口和Thread类编程实 编写一应用程序创建两个线程一个线程打印输出1—1000之间所有的奇数(Odd Number) * 另外一个线程打印输出1-1000之间所有的偶数(Even Number)要求两个线程随机休眠一 段...

    创建线程的四种方式?

    1,继承Thread类(底层 Thread类也实现了 Runnable接口) class MyThread extends Thread 2,实现Runnable接口 class MyThread implements Runnable 3,(JDK1.5以后)实现Callable接口 4,使用线程池 面试题: 说说...

    java 一手画方一手画圆 多线程

    public class fangyuan extends Applet implements Runnable { Thread left,right; Graphics mypen; int x,y,z,a,b,i; public void init() { left=new Thread(this); right=new Thread(this); x=10; y=10; mypen=...

    学生管理系统

    public class Index extends JWindow implements Runnable{ //定义与进度条相关的组件 JProgressBar jpb;//定义进度条 JLabel jl1;//用于在窗体的北部放一张图片,南部是进度条 int width,height;//用于获取显示...

    java多线程机制 -- 源码详解

    This代表着小程序作为这个新的线程的目标对象,因此我们的小程序必须为这个新创建的线程实现Runnable接口,即小程序利用Runnable接口为其中创建的这个新线程提供run()方法,给出该线程的操作。 首先,在小程序的...

    Android多线程及异步处理问题详细探讨

    2)多线程实现方式implements Runnable 或 extends Thread 3)多线程核心机制是Handler 4)提供如下几种实现方式 —-1—–Handler ————————————说明1 创建一个Handler时一定要关联一个Looper实例,默认...

    简单的元胞自动机程序

    public class Cell extends Frame implements Runnable{ Thread runner = new Thread(this);//为类定义一个线程,在start中启用 public static int width = 308; public static int height = 255; int cellGrid...

    Java图片处理-生成火焰效果.rar

    Java图片处理-生成火焰效果,public class FirePicApplet extends Applet implements Runnable{  private Image backImage,foreImage; //前景和背景Image对象  private Image image,fireImage; //Applet和绘制...

    Java实现图形弹跳球程序

    public class Test extends Applet implements Runnable { int x = 150, y = 50, r = 30; //设置圆的属性 int dx = 11, dy = 7; // 圆的轨线设置 Thread animator; // 线程 volatile boolean pleaseStop; ...

    Java线程:你想了解的,我都有

    Java线程:你想了解的,我都有 Java线程的三种创建方式 继承Thread对象 class ThreadImpOne extends Thread{ ...class ThreadImpTwo implements Runnable{ @Override public void run() { System.out.printl

    java课程设计报告-五子棋(1).doc

    、接口的定义和实现 Interface 接口名{//抽象方法} //定义接口 Class 类名 implements 接口名称{// 类体} 实现接口 5、线程 、线程的定义 即同时执行多个程序段,每个程序段都是一个线程。 、线程的周期 线程的周期...

    java课程设计报告-五子棋.doc

    、接口的定义和实现 Interface 接口名{//抽象方法} //定义接口 Class 类名 implements 接口名称{// 类体} 实现接口 5、线程 、线程的定义 即同时执行多个程序段,每个程序段都是一个线程。 、线程的周期 线程的周期...

    java课程设计报告-五子棋(2).doc

    、接口的定义和实现 Interface 接口名{//抽象方法} //定义接口 Class 类名 implements 接口名称{// 类体} 实现接口 5、线程 、线程的定义 即同时执行多个程序段,每个程序段都是一个线程。 、线程的周期 线程的周期...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【多线程】多线程的实现方式Thread、Runnable、Callable 72 【多线程】实现Runnable接口与继承Thread类比较 73 【多线程】线程状态转换 74 【多线程】线程的调度 75 线程优先级 75 sleep 76 wait 76 yield 77 join ...

    超级有影响力霸气的Java面试题大全文档

    ArrayList 和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector...

    Java 2实用教程(第三版)实验指导与习题解答

    实验1 三角形、梯形和圆形的类封装 9 实验2 实例成员与类成员 12 实验3 使用package语句与import语句 13 上机实践4 继承与接口 15 实验1 继承 15 实验2 上转型对象 17 实验3 接口回调 18 上机实践5 字符串、时间与...

    java 面试题 总结

    ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector...

    JAVA笑游戏象棋代码~

    class ChessMainFrame extends JFrame implements ActionListener,MouseListener,Runnable { //玩家 JLabel play[] = new JLabel[32]; //棋盘 JLabel image; //窗格 Container con; //工具栏 ...

    画布上显示的控件

    public class MySurfaceView extends SurfaceView implements Callback, Runnable { public MySurfaceView(Context context, AttributeSet attrs) { super(context, attrs); sfh = this.getHolder(); sfh....

Global site tag (gtag.js) - Google Analytics