多线程
Posted lick468
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程相关的知识,希望对你有一定的参考价值。
线程是在进程中独立运行的子任务。
什么场景使用多线程技术?
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
继承Thread类创建线程。
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("结束");//耗时小
运行结果
实现Running接口创建线程。
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()的顺序
以上是关于多线程的主要内容,如果未能解决你的问题,请参考以下文章