java代码的高并发怎么用

Python09

java代码的高并发怎么用,第1张

public class Test {

public static void main(String[] args) {

int count = 1000

ExecutorService executorService = Executors.newFixedThreadPool(count)

for (int i = 0 i < count i++)

executorService.execute(new Test().new Task())

executorService.shutdown()

while (!executorService.isTerminated()) {

try {

Thread.sleep(10)

} catch (InterruptedException e) {

e.printStackTrace()

}

}

}

public class Task implements Runnable {

@Override

public void run() {

try {

// 测试内容

} catch (Exception e) {

e.printStackTrace()

}

}

}

}  

如果要实现真正的并发同时执行,可通过CyclicBarrier来控制。

public class Test {

public static void main(String[] args) {

int count = 1000

CyclicBarrier cyclicBarrier = new CyclicBarrier(count)

ExecutorService executorService = Executors.newFixedThreadPool(count)

for (int i = 0 i < count i++)

executorService.execute(new Test().new Task(cyclicBarrier))

executorService.shutdown()

while (!executorService.isTerminated()) {

try {

Thread.sleep(10)

} catch (InterruptedException e) {

e.printStackTrace()

}

}

}

public class Task implements Runnable {

private CyclicBarrier cyclicBarrier

public Task(CyclicBarrier cyclicBarrier) {

this.cyclicBarrier = cyclicBarrier

}

@Override

public void run() {

try {

// 等待所有任务准备就绪

cyclicBarrier.await()

// 测试内容

} catch (Exception e) {

e.printStackTrace()

}

}

}

}

在java中如果要创建线程的话,一般有两种方式:1)继承Thread类;2)实现Runnable接口。

1.继承Thread类

继承Thread类的话,必须重写run方法,在run方法中定义需要执行的任务。

123456789101112

class MyThread extends Thread{private static int num = 0public MyThread(){num++ } @Overridepublic void run() {System.out.println("主动创建的第"+num+"个线程") }}

创建好了自己的线程类之后,就可以创建线程对象了,然后通过start()方法去启动线程。注意,不是调用run()方法启动线程,run方法中只是定义需要执行的任务,如果调用run方法,即相当于在主线程中执行run方法,跟普通的方法调用没有任何区别,此时并不会创建一个新的线程来执行定义的任务。

1234567891011121314151617181920

public class Test {public static void main(String[] args) {MyThread thread = new MyThread() thread.start() }} class MyThread extends Thread{private static int num = 0public MyThread(){num++ } @Overridepublic void run() {System.out.println("主动创建的第"+num+"个线程") }}

在上面代码中,通过调用start()方法,就会创建一个新的线程了。为了分清start()方法调用和run()方法调用的区别,请看下面一个例子:

1234567891011121314151617181920212223

public class Test {public static void main(String[] args) {System.out.println("主线程ID:"+Thread.currentThread().getId()) MyThread thread1 = new MyThread("thread1") thread1.start() MyThread thread2 = new MyThread("thread2") thread2.run() }} class MyThread extends Thread{private String namepublic MyThread(String name){this.name = name } @Overridepublic void run() {System.out.println("name:"+name+" 子线程ID:"+Thread.currentThread().getId()) }