700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 多线程有几种实现方法 都是什么?同步有几种实现方法 都是什么?

多线程有几种实现方法 都是什么?同步有几种实现方法 都是什么?

时间:2020-05-27 01:34:07

相关推荐

多线程有几种实现方法 都是什么?同步有几种实现方法 都是什么?

1.多线程有4种实现方法

继承Thread类,重写run方法实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target通过Callable和FutureTask创建线程通过线程池创建线程

同步的实现方面有两种,分别是synchronized,wait与notify

2.wait():使一个线程处于等待状态,并且释放所持有的对象的lock。

sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法, * 调用此方法要捕捉InterruptedException异常 * 。

notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程 ,而是由JVM确定唤醒哪个线程,而且不是按优先级。

notifyAll():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

3.

方式1:继承Thread类的线程实现方式如下:

public class ThreadDemo01 extends Thread{public ThreadDemo01(){//编写子类的构造方法,可缺省}public void run(){//编写自己的线程代码System.out.println(Thread.currentThread().getName());}public static void main(String[] args){ThreadDemo01 threadDemo01 = new ThreadDemo01();threadDemo01.setName("我是自定义的线程1");threadDemo01.start(); System.out.println(Thread.currentThread().toString()); }}

程序结果:

Thread[main,5,main]

我是自定义的线程1

线程实现方式2:通过实现Runnable接口,实现run方法,接口的实现类的实例作为Thread的target作为参数传入带参的Thread构造函数,通过调用start()方法启动线程

public class ThreadDemo02 {public static void main(String[] args){System.out.println(Thread.currentThread().getName());Thread t1 = new Thread(new MyThread());t1.start();}}class MyThread implements Runnable{@Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println(Thread.currentThread().getName()+"-->我是通过实现接口的线程实现方式!");} }

程序运行结果:

main

Thread-0–>我是通过实现接口的线程实现方式!

线程实现方式3:通过Callable和FutureTask创建线程

a:创建Callable接口的实现类 ,并实现Call方法

b:创建Callable实现类的实现,使用FutureTask类包装Callable对象,该FutureTask对象封装了Callable对象的Call方法的返回值

c:使用FutureTask对象作为Thread对象的target创建并启动线程

d:调用FutureTask对象的get()来获取子线程执行结束的返回值

public class ThreadDemo03 {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubCallable<Object> oneCallable = new Tickets<Object>();FutureTask<Object> oneTask = new FutureTask<Object>(oneCallable);Thread t = new Thread(oneTask);System.out.println(Thread.currentThread().getName());t.start();}}class Tickets<Object> implements Callable<Object>{//重写call方法@Overridepublic Object call() throws Exception {// TODO Auto-generated method stubSystem.out.println(Thread.currentThread().getName()+"-->我是通过实现Callable接口通过FutureTask包装器来实现的线程");return null;} }

程序运行结果:

main

Thread-0–>我是通过实现Callable接口通过FutureTask包装器来实现的线程

线程实现方式4:通过线程池创建线程

public class ThreadDemo05{private static int POOL_NUM = 10; //线程池数量/*** @param args* @throws InterruptedException*/public static void main(String[] args) throws InterruptedException {// TODO Auto-generated method stubExecutorService executorService = Executors.newFixedThreadPool(5); for(int i = 0; i<POOL_NUM; i++) { RunnableThread thread = new RunnableThread();//Thread.sleep(1000);executorService.execute(thread); }//关闭线程池executorService.shutdown();} }class RunnableThread implements Runnable { @Overridepublic void run() { System.out.println("通过线程池方式创建的线程:" + Thread.currentThread().getName() + " "); } }

原文:/u011480603/article/details/75332435/

版权声明:本文为博主原创文章,转载请附上博文链接!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。