标签:int 顺序 业务 方法 rri 方式 说明 代码 art
线程是在进程中独立运行的子任务。
什么场景使用多线程技术?
1.阻塞。一旦系统中出现了阻塞现象,则可以根据实际情况来使用多线程技术提高运行效率。
2.依赖。业务分为两个执行过程,A和B,A业务发生阻塞时,B业务不需要A业务的执行结果,这时B业务可以使用多线程技术提高运行效率。
多线程是异步的。多线程随即执行,是因为CPU将时间片(时间片是CPU分配给各个程序的时间)分给不同的线程,线程获得时间片后才能执行任务。
CPU在不同的线程上进行切换是需要耗时的,所以并不是创建的线程越多,软件运行效率就越高,相反,线程过多反而会降低软件的执行效率。
实现多线程技术的两种方式: 1.继承Thread类,2.实现Running接口。
说明 :1.Thread 类实现了Running接口。 2.使用继承Thread类的方式创建新线程时,就不支持多继承了。
public class Thread implements Runnable
MyThread.java
package thread;
public class MyThread extends Thread {
@Override
public void run() {
super.run();
System.out.println("运行了MyThread");
}
}
MyThreadRun.java
package thread;
public class MyThreadRun {
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start();// 耗时大
System.out.println("结束");//耗时小
}
}
运行结果
MyRunning.java
package thread;
public class MyRunning implements Runnable {
@Override
public void run() {
System.out.println("运行了MyRuning");
}
}
MyRunningRun.java
package thread;
public class MyRunningRun {
public static void main(String[] args) {
Runnable runnable = new MyRunning();
Thread thread = new Thread(runnable);
thread.start();
System.out.println("运行结束");
}
}
运行结果
使用synchronized 关键字,使多个线程在执行run方法时,以排队的方式进行处理。
synchronized可以对任何对象及方法加锁,而加锁的这段代码称为“互斥区”或"临界区",
MyThread.java
package thread;
public class MyThread extends Thread {
private int count = 5; //总票数
@Override
synchronized public void run() {
super.run();
count--;
System.out.println("由 " + Thread.currentThread().getName() +" 售票, 现在剩余票count = " + count );
}
}
MyThreadRun.java
package thread;
public class MyThread extends Thread {
private int count = 5; //总票数
@Override
synchronized public void run() {
super.run();
count--;
System.out.println("由 " + Thread.currentThread().getName() +" 售票, 现在剩余票count = " + count );
}
}
运行结果 可以看到运行结果并不是按照ABCDE 进行执行的,说明执行start()的顺序不代表执行run()的顺序
标签:int 顺序 业务 方法 rri 方式 说明 代码 art
原文地址:https://www.cnblogs.com/lick468/p/11299245.html