线程的创建
package JUC. juc1;
public class CreateThread {
public static void main ( String [ ] args) {
ThreadDemo1 threadDemo1 = new ThreadDemo1 ( ) ;
threadDemo1. setName ( "Thread Method" ) ;
threadDemo1. start ( ) ;
Thread runnable = new Thread ( new ThreadDemo2 ( ) , "Runnable interface" ) ;
runnable. start ( ) ;
runnable. run ( ) ;
new Thread (
( ) ->
System . out. println ( Thread . currentThread ( ) + "run3()方法执行" ) , "run3" )
. start ( ) ;
}
}
class ThreadDemo1 extends Thread {
@Override
public void run ( ) {
System . out. println ( Thread . currentThread ( ) + "run1()方法执行" ) ;
}
}
class ThreadDemo2 implements Runnable {
@Override
public void run ( ) {
System . out. println ( Thread . currentThread ( ) + "run2()方法执行" ) ;
}
}
死锁
package JUC. juc1;
public class DeadLockDemo {
private static Object resource1 = new Object ( ) ;
private static Object resource2 = new Object ( ) ;
public static void main ( String [ ] args) {
new Thread ( ( ) -> {
synchronized ( resource1) {
System . out. println ( Thread . currentThread ( ) + "get resource1" ) ;
try {
Thread . sleep ( 1000 ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
}
System . out. println ( Thread . currentThread ( ) + "waiting get resource2" ) ;
synchronized ( resource2) {
System . out. println ( Thread . currentThread ( ) + "get resource2" ) ;
}
}
} , "线程1" ) . start ( ) ;
Thread thread = new Thread ( new Thread2 ( ) , "线程2" ) ;
thread. start ( ) ;
}
static class Thread2 implements Runnable {
@Override
public void run ( ) {
synchronized ( resource2) {
System . out. println ( Thread . currentThread ( ) + "get resource2" ) ;
try {
Thread . sleep ( 1000 ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
}
System . out. println ( Thread . currentThread ( ) + "waiting get resource1" ) ;
synchronized ( resource1) {
System . out. println ( Thread . currentThread ( ) + "get resource1" ) ;
}
}
}
}
}
三个线程轮流打印ABC
package JUC. juc1;
public class PrintABC {
private int num;
private static final Object Lock = new Object ( ) ;
public static void main ( String [ ] args) {
PrintABC printABC = new PrintABC ( ) ;
for ( int i = 0 ; i < 50 ; i++ ) {
Thread thread1 = new Thread ( new Runnable ( ) {
@Override
public void run ( ) {
printABC. printMehthod ( "A" , 0 ) ;
}
} ) ;
thread1. setName ( "A" ) ;
thread1. start ( ) ;
new Thread ( new Runnable ( ) {
@Override
public void run ( ) {
printABC. printMehthod ( "B" , 1 ) ;
}
} , "B" ) . start ( ) ;
new Thread ( ( ) -> printABC. printMehthod ( "C" , 2 ) , "C" ) . start ( ) ;
}
Lock . notifyAll ( ) ;
}
private void printMehthod ( String name, int targetNum) {
synchronized ( Lock )
{
while ( num % 3 != targetNum) {
try {
Lock . wait ( ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
}
}
num++ ;
System . out. println ( name) ;
Lock . notifyAll ( ) ;
}
}
}
两个线程轮流打印奇偶数
package JUC. juc1;
public class PrintOddEven {
private volatile int count;
private Object monitor = new Object ( ) ;
PrintOddEven ( int initCount) {
this . count = initCount;
}
public static void main ( String [ ] args) {
PrintOddEven printOddEven = new PrintOddEven ( 0 ) ;
new Thread ( ( ) -> printOddEven. printMethod ( ) , "odd " ) . start ( ) ;
new Thread ( ( ) -> printOddEven. printMethod ( ) , "even" ) . start ( ) ;
}
private void printMethod ( ) {
synchronized ( monitor)
{
while ( count < 100 ) {
try {
System . out. print ( Thread . currentThread ( ) . getName ( ) + ":" ) ;
System . out. println ( ++ count) ;
monitor. notifyAll ( ) ;
monitor. wait ( ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
}
}
monitor. notifyAll ( ) ;
}
}
}
N个线程轮流连续打印1到100.
package JUC. juc1;
public class PrintOneByOneTo100 {
private volatile int num = 0 ;
private static int N = 4 ;
private int maxnum = 100 ;
private Object monitor = new Object ( ) ;
public static void main ( String [ ] args) {
PrintOneByOneTo100 printOneByOneTo100 = new PrintOneByOneTo100 ( ) ;
for ( int i = 0 ; i < N ; i++ ) {
int finalI = i;
new Thread ( ( ) -> printOneByOneTo100. printMethod ( finalI) , "Thread" + i) . start ( ) ;
}
}
private void printMethod ( int targetNum) {
while ( true ) {
synchronized ( monitor) {
while ( num % N != targetNum) {
if ( num >= maxnum) {
break ;
}
try {
monitor. wait ( ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
}
}
if ( num >= maxnum) {
break ;
}
num++ ;
System . out. println ( Thread . currentThread ( ) + ":" + num) ;
monitor. notifyAll ( ) ;
}
}
}
}