- 线程安全:当多个线程访问同一个类时,这个类始终表现出正确的行为
- 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只能单继承,但可以实现多个接口。避免继承的局限
相关推荐
在Java中,实现多线程有几种方式: 继承Thread类:创建一个类继承自java.lang.Thread类,并重写run()方法来定义线程的执行逻辑。然后可以创建该类的实例并调用start()方法启动线程。 java class MyThread extends ...
* 分别使用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,使用线程池 面试题: 说说...
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;//用于获取显示...
This代表着小程序作为这个新的线程的目标对象,因此我们的小程序必须为这个新创建的线程实现Runnable接口,即小程序利用Runnable接口为其中创建的这个新线程提供run()方法,给出该线程的操作。 首先,在小程序的...
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图片处理-生成火焰效果,public class FirePicApplet extends Applet implements Runnable{ private Image backImage,foreImage; //前景和背景Image对象 private Image image,fireImage; //Applet和绘制...
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线程的三种创建方式 继承Thread对象 class ThreadImpOne extends Thread{ ...class ThreadImpTwo implements Runnable{ @Override public void run() { System.out.printl
、接口的定义和实现 Interface 接口名{//抽象方法} //定义接口 Class 类名 implements 接口名称{// 类体} 实现接口 5、线程 、线程的定义 即同时执行多个程序段,每个程序段都是一个线程。 、线程的周期 线程的周期...
、接口的定义和实现 Interface 接口名{//抽象方法} //定义接口 Class 类名 implements 接口名称{// 类体} 实现接口 5、线程 、线程的定义 即同时执行多个程序段,每个程序段都是一个线程。 、线程的周期 线程的周期...
、接口的定义和实现 Interface 接口名{//抽象方法} //定义接口 Class 类名 implements 接口名称{// 类体} 实现接口 5、线程 、线程的定义 即同时执行多个程序段,每个程序段都是一个线程。 、线程的周期 线程的周期...
【多线程】多线程的实现方式Thread、Runnable、Callable 72 【多线程】实现Runnable接口与继承Thread类比较 73 【多线程】线程状态转换 74 【多线程】线程的调度 75 线程优先级 75 sleep 76 wait 76 yield 77 join ...
ArrayList 和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector...
实验1 三角形、梯形和圆形的类封装 9 实验2 实例成员与类成员 12 实验3 使用package语句与import语句 13 上机实践4 继承与接口 15 实验1 继承 15 实验2 上转型对象 17 实验3 接口回调 18 上机实践5 字符串、时间与...
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector...
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....