带你整理面试过程中关于多线程的编程问题
Posted 南淮北安
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带你整理面试过程中关于多线程的编程问题相关的知识,希望对你有一定的参考价值。
文章目录
一、多线程打印10个数
class MyThread implements Runnable
int num = 1;
@Override
public void run()
for (int i = 0; i < 10; i++)
//对当前对象加锁
synchronized (this)
//判断是否满足条件
if (num <= 10)
System.out.println(Thread.currentThread().getName() + " >>> " + num++);
public class Test
public static void main(String[] args)
MyThread myThread = new MyThread();
Thread thread1 = new Thread(myThread, "A");
Thread thread2 = new Thread(myThread, "B");
thread1.start();
thread2.start();
二、交替打印奇偶不加锁
import java.util.concurrent.ThreadPoolExecutor;
class MyThread
//控制 i 打印10次
volatile int i = 1;
//通过flag控制轮到哪个线程打印
volatile int flag = 1;
public void runThread()
//匿名类实现第一个线程
Thread t1 = new Thread("A")
@Override
public void run()
while (i <= 10)
if (flag == 1)
System.out.println(Thread.currentThread().getName() + " >>> " + i++);
flag++;
;
//第二个线程
Thread t2 = new Thread("B")
@Override
public void run()
while (i <= 10)
if (flag == 2)
System.out.println(Thread.currentThread().getName() + " >>> " + i++);
flag=1;
;
t1.start();
t2.start();
public class Test
public static void main(String[] args)
MyThread myThread = new MyThread();
myThread.runThread();
三、交替打印10个数不加锁
import java.util.concurrent.ThreadPoolExecutor;
class MyThread
//控制 i 打印10次
volatile int i = 1;
//通过flag控制轮到哪个线程打印
volatile int flag = 1;
public void runThread()
//匿名类实现第一个线程
Thread t1 = new Thread("A")
@Override
public void run()
while (i <= 10)
if (flag == 1)
System.out.println(Thread.currentThread().getName() + " >>> " + i++);
flag++;
;
//第二个线程
Thread t2 = new Thread("B")
@Override
public void run()
while (i <= 10)
if (flag == 2)
System.out.println(Thread.currentThread().getName() + " >>> " + i++);
flag++;
;
//第三个线程
Thread t3 = new Thread("C")
@Override
public void run()
while (i <= 10)
if (flag == 3)
System.out.println(Thread.currentThread().getName() + " >>> " + i++);
flag = 1;
;
t1.start();
t2.start();
t3.start();
public class Test
public static void main(String[] args)
MyThread myThread = new MyThread();
myThread.runThread();
以上是关于带你整理面试过程中关于多线程的编程问题的主要内容,如果未能解决你的问题,请参考以下文章
带你整理面试过程中关于Java 中多线程的创建方式的最全整理
带你整理面试过程中关于JVM 的运行机制多线程和 JVM 的内存区域的相关知识点
带你整理面试过程中关于 JVM 中分代收集算法分区收集算法和垃圾收集器的相关知识