文档

java体系技术文档


多线程编程题

<h2>两个线程轮流打印数字</h2> <pre><code class="language-java">public class Main { private static AtomicInteger num = new AtomicInteger(0); private static volatile boolean flag = false; private static int count = 100; public static void main(String[] args) { Thread t1 = new Thread(() -&gt; { while (num.get() &lt; count) { if (!flag &amp;&amp; num.getAndIncrement()%2 == 0) { System.out.println("Thread 1 开始打印,打印数字是:" + num.get()); flag = true; } } }); Thread t2 = new Thread(() -&gt; { while (num.get() &lt; count) { if (flag &amp;&amp; num.getAndIncrement()%2 == 1) { System.out.println("Thread 2 开始打印,打印数字是:" + num.get()); flag = false; } } }); t1.start(); t2.start(); } }</code></pre> <h2>线程轮流依次执行</h2> <pre><code class="language-java">public class Main { public static void main(String[] args) { MyThread t1 = new MyThread("t1"); MyThread t2 = new MyThread("t2"); MyThread t3 = new MyThread("t3"); try { t1.start(); t1.join(); t2.start(); t2.join(); t3.start(); t3.join(); } catch (InterruptedException e) { e.printStackTrace(); } } static class MyThread extends Thread { private int count = 5; public MyThread(String name) { super(name); } @Override public void run() { System.out.println("线程" + getName() + "执行开始"); for (int i=0;i&lt;count;i++) { System.out.println("线程" + getName() + "打印数字:" + i); } System.out.println("线程" + getName() + "执行结束"); } } }</code></pre> <h2>三个线程轮流依次执行5次</h2> <pre><code class="language-java">public class Main { private static AtomicInteger num = new AtomicInteger(0); private static volatile int flag = 1; private static int count = 15; public static void main(String[] args) { Thread t1 = new Thread(() -&gt; { while (num.get() &lt; count) { if (flag == 1 &amp;&amp; num.getAndIncrement()%3 == 0) { System.out.print("A"); flag = 2; } } }); Thread t2 = new Thread(() -&gt; { while (num.get() &lt; count) { if (flag == 2 &amp;&amp; num.getAndIncrement()%3 == 1) { System.out.print("B"); flag = 3; } } }); Thread t3 = new Thread(() -&gt; { while (num.get() &lt; count) { if (flag == 3 &amp;&amp; num.getAndIncrement()%3 == 2) { System.out.print("C"); flag = 1; } } }); t1.start(); t2.start(); t3.start(); } }</code></pre> <h2>两个线程交替输出12A34B...5152Z</h2> <pre><code class="language-java">public class Main { private static AtomicInteger num = new AtomicInteger(0); private static volatile int flag = 1; private static volatile char character = 'A'; private static int count = 52; public static void main(String[] args) { Thread t1 = new Thread(() -&gt; { while (num.get() &lt; count) { if (flag == 1 &amp;&amp; num.getAndIncrement()%2 == 0) { System.out.print(num.get()); System.out.print(num.get() + 1); flag = 2; } } }); Thread t2 = new Thread(() -&gt; { while (num.get() &lt; count) { if (flag == 2 &amp;&amp; num.getAndIncrement()%2 == 1) { System.out.print(character); character = (char)(character +1); flag = 1; } } }); t1.start(); t2.start(); } }</code></pre> <h2>子线程执行2次,主线程执行4次,如此循环5次</h2> <pre><code class="language-java">public class Main { private static AtomicInteger num = new AtomicInteger(0); private static volatile boolean flag = false; private static int count = 10; private static int subCount = 2; private static int mainCount = 4; public static void main(String[] args) { new Thread(() -&gt; { while (num.get() &lt; count) { if (!flag &amp;&amp; num.getAndIncrement()%2 == 0) { for (int i=0;i&lt;subCount;i++) { System.out.println("子线程开始打印,打印数字是:" + i); } flag = true; } } }).start(); while (num.get() &lt; count) { if (flag &amp;&amp; num.getAndIncrement()%2 == 1) { for (int j=0;j&lt;mainCount;j++) { System.out.println("主线程开始打印,打印数字是:" + j); } flag = false; } } } }</code></pre>

页面列表

ITEM_HTML