例子1
package com. atguigu. java ;
class MyThread extends Thread {
@Override
public void run ( ) {
for ( int i = 0 ; i < 100 ; i++ ) {
if ( i% 2 == 0 ) {
System . out. println ( Thread . currentThread ( ) . getName ( ) + ":" + i) ;
}
}
}
}
public class ThreadTest {
public static void main ( String [ ] args) {
MyThread t1 = new MyThread ( ) ;
t1. start ( ) ;
MyThread t2 = new MyThread ( ) ;
t2. start ( ) ;
for ( int i = 0 ; i < 100 ; i++ ) {
if ( i% 2 == 0 ) {
System . out. println ( Thread . currentThread ( ) . getName ( ) + ":" + i+ "***********" ) ;
}
}
}
}
例子2
package com. atguigu. exer ;
public class ThreadDemo {
public static void main ( String [ ] args) {
new Thread ( ) {
@Override
public void run ( ) {
for ( int i = 0 ; i < 100 ; i++ ) {
if ( i% 2 == 0 ) {
System . out. println ( Thread . currentThread ( ) . getName ( ) + ":" + i) ;
}
}
}
} . start ( ) ;
new Thread ( ) {
@Override
public void run ( ) {
for ( int i = 0 ; i < 100 ; i++ ) {
if ( i% 2 != 0 ) {
System . out. println ( Thread . currentThread ( ) . getName ( ) + ":" + i) ;
}
}
}
} . start ( ) ;
}
}
class MyThread1 extends Thread {
@Override
public void run ( ) {
for ( int i = 0 ; i < 100 ; i++ ) {
if ( i% 2 == 0 ) {
System . out. println ( Thread . currentThread ( ) . getName ( ) + ":" + i) ;
}
}
}
}
class MyThread2 extends Thread {
@Override
public void run ( ) {
for ( int i = 0 ; i < 100 ; i++ ) {
if ( i% 2 != 0 ) {
System . out. println ( Thread . currentThread ( ) . getName ( ) + ":" + i) ;
}
}
}
}
例子3
package com. atguigu. exer ;
class HelloThread extends Thread {
public void run ( ) {
for ( int i = 0 ; i < 100 ; i++ ) {
if ( i% 2 == 0 ) {
System . out. println ( Thread . currentThread ( ) . getName ( ) + ":" + i) ;
}
}
}
public HelloThread ( String name) {
super ( name) ;
}
}
public class ThreadMethodTest {
public static void main ( String [ ] args) {
HelloThread h1 = new HelloThread ( "Thread:1" ) ;
h1. start ( ) ;
Thread . currentThread ( ) . setName ( "主线程" ) ;
for ( int i= 0 ; i< 100 ; i++ ) {
if ( i% 2 == 0 ) {
System . out. println ( Thread . currentThread ( ) . getName ( ) + ":" + i) ;
}
}
}
}
例子4
package com. atguigu. exer ;
class HelloThread extends Thread {
public void run ( ) {
for ( int i = 0 ; i < 100 ; i++ ) {
if ( i% 2 == 0 ) {
System . out. println ( Thread . currentThread ( ) . getName ( ) + ":" + i) ;
}
if ( i% 20 == 0 ) {
this . yield ( ) ;
}
}
}
public HelloThread ( String name) {
super ( name) ;
}
}
public class ThreadMethodTest {
public static void main ( String [ ] args) {
HelloThread h1 = new HelloThread ( "Thread:1" ) ;
h1. start ( ) ;
Thread . currentThread ( ) . setName ( "主线程" ) ;
for ( int i= 0 ; i< 100 ; i++ ) {
System . out. println ( Thread . currentThread ( ) . getName ( ) + ":" + i) ;
}
}
}
例子5
package com. atguigu. java ;
class MThread implements Runnable {
public void run ( ) {
for ( int i= 0 ; i< 100 ; i++ ) {
if ( i% 2 == 0 ) {
System . out. println ( i) ;
}
}
}
}
public class ThreadTest1 {
public static void main ( String [ ] args) {
MThread mThread = new MThread ( ) ;
Thread t1 = new Thread ( mThread) ;
t1. start ( ) ;
}
}
例子6
package com. atguigu. java ;
class Window1 implements Runnable {
private int ticket = 100 ;
Object obj = new Object ( ) ;
public void run ( ) {
while ( true ) {
synchronized ( obj) {
if ( ticket > 0 ) {
try {
Thread . sleep ( 100 ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
}
System . out. println ( Thread . currentThread ( ) . getName ( ) + ":卖票,票号为:" + ticket) ;
ticket-- ;
} else {
break ;
}
}
}
}
}
public class WindowTest1 {
public static void main ( String [ ] args) {
Window1 w = new Window1 ( ) ;
Thread t1 = new Thread ( w) ;
Thread t2 = new Thread ( w) ;
Thread t3 = new Thread ( w) ;
t1. setName ( "窗口1" ) ;
t2. setName ( "窗口2" ) ;
t3. setName ( "窗口3" ) ;
t1. start ( ) ;
t2. start ( ) ;
t3. start ( ) ;
}
}
例子7
package com. atguigu. java ;
class Window2 extends Thread {
private static int ticket = 100 ;
private static Object obj = new Object ( ) ;
public void run ( ) {
while ( true ) {
synchronized ( obj) {
if ( ticket > 0 ) {
try {
Thread . sleep ( 100 ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
}
System . out. println ( Thread . currentThread ( ) . getName ( ) + ":卖票,票号为:" + ticket) ;
ticket-- ;
} else {
break ;
}
}
}
}
}
public class WindowsTest2 {
public static void main ( String [ ] args) {
Window2 t1 = new Window2 ( ) ;
Window2 t2 = new Window2 ( ) ;
Window2 t3 = new Window2 ( ) ;
t1. setName ( "窗口1" ) ;
t2. setName ( "窗口2" ) ;
t3. setName ( "窗口3" ) ;
t1. start ( ) ;
t2. start ( ) ;
t3. start ( ) ;
}
}
例子7
class Window3 implements Runnable {
private int ticket = 100 ;
Object obj = new Object ( ) ;
public void run ( ) {
while ( true ) {
show ( ) ;
}
}
private synchronized void show ( ) {
if ( ticket > 0 ) {
try {
Thread . sleep ( 100 ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
}
System . out. println ( Thread . currentThread ( ) . getName ( ) + ":卖票,票号为:" + ticket) ;
ticket-- ;
}
}
}
public class WindowTest3 {
public static void main ( String [ ] args) {
Window3 w = new Window3 ( ) ;
Thread t1 = new Thread ( w) ;
Thread t2 = new Thread ( w) ;
Thread t3 = new Thread ( w) ;
t1. setName ( "窗口1" ) ;
t2. setName ( "窗口2" ) ;
t3. setName ( "窗口3" ) ;
t1. start ( ) ;
t2. start ( ) ;
t3. start ( ) ;
}
}
例子8
package com. atguigu. java ;
import com. sun. corba. se. impl. orbutil. StackImpl ;
class Window4 extends Thread {
private static int ticket = 100 ;
private static Object obj = new Object ( ) ;
public void run ( ) {
while ( true ) {
show ( ) ;
}
}
private Static synchronized void show ( ) {
if ( ticket > 0 ) {
try {
Thread . sleep ( 100 ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
}
System . out. println ( Thread . currentThread ( ) . getName ( ) + ":卖票,票号为:" + ticket) ;
ticket-- ;
}
}
}
public class WindowsTest4 {
public static void main ( String [ ] args) {
Window4 t1 = new Window4 ( ) ;
Window4 t2 = new Window4 ( ) ;
Window4 t3 = new Window4 ( ) ;
t1. setName ( "窗口1" ) ;
t2. setName ( "窗口2" ) ;
t3. setName ( "窗口3" ) ;
t1. start ( ) ;
t2. start ( ) ;
t3. start ( ) ;
}
}
例子9
package com. atguigu. java1 ;
public class BankTest {
}
class Bank {
private Bank ( ) { } ;
private static Bank instance = null ;
public static Bank getInstance ( ) {
if ( instance = null ) {
synchronized ( Bank . class ) {
if ( instance== null ) {
instance = new Bank ( ) ;
}
}
}
return instance;
}
}
例子10
package com. atguigu. java1 ;
public class ThreadTest {
public static void main ( String [ ] args) {
StringBuffer s1 = new StringBuffer ( ) ;
StringBuffer s2 = new StringBuffer ( ) ;
new Thread ( ) {
@Override
public void run ( ) {
synchronized ( s1) {
s1. append ( "a" ) ;
s2. append ( "1" ) ;
try {
Thread . sleep ( 100 ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
}
synchronized ( s2) {
s1. append ( "b" ) ;
s2. append ( "2" ) ;
System . out. println ( s1) ;
System . out. println ( s2) ;
}
}
}
} . start ( ) ;
new Thread ( new Runnable ( ) {
@Override
public void run ( ) {
synchronized ( s2) {
s1. append ( "c" ) ;
s2. append ( "3" ) ;
try {
Thread . sleep ( 100 ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
}
synchronized ( s1) {
s1. append ( "d" ) ;
s2. append ( "4" ) ;
System . out. println ( s1) ;
System . out. println ( s2) ;
}
}
}
} ) . start ( ) ;
}
}
例子11
package com. atguigu. java1 ;
import java. util. concurrent. locks. ReentrantLock ;
class Window implements Runnable {
private int ticket = 100 ;
private ReentrantLock lock = new ReentrantLock ( ) ;
public void run ( ) {
while ( true ) {
try {
lock. lock ( ) ;
if ( ticket> 0 ) {
try {
Thread . sleep ( 100 ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
}
System . out. println ( Thread . currentThread ( ) . getName ( ) + ":售票,票号为:" + ticket) ;
ticket-- ;
} else {
break ;
}
} finally {
lock. unlock ( ) ;
}
}
}
}
public class LockTest {
public static void main ( String [ ] args) {
Window w = new Window ( ) ;
Thread t1 = new Thread ( w) ;
Thread t2 = new Thread ( w) ;
Thread t3 = new Thread ( w) ;
t1. setName ( "窗口1" ) ;
t2. setName ( "窗口2" ) ;
t3. setName ( "窗口3" ) ;
t1. start ( ) ;
t2. start ( ) ;
t3. start ( ) ;
}
}
例子12
package com. atguigu. java2 ;
class Number implements Runnable {
private int number = 1 ;
@Override
public void run ( ) {
while ( true ) {
synchronized ( this ) {
notify ( ) ;
if ( number<= 100 ) {
try {
Thread . sleep ( 10 ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
}
System . out. println ( Thread . currentThread ( ) . getName ( ) + ":" + number) ;
number++ ;
try {
wait ( ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
}
} else {
break ;
}
}
}
}
}
public class CommunicationTest {
public static void main ( String [ ] args) {
Number number = new Number ( ) ;
Thread t1 = new Thread ( number) ;
Thread t2 = new Thread ( number) ;
t1. setName ( "线程1" ) ;
t2. setName ( "线程2" ) ;
t1. start ( ) ;
t2. start ( ) ;
}
}
例子13
package com. atguigu. java2 ;
import java. util. concurrent. Callable ;
import java. util. concurrent. ExecutionException ;
import java. util. concurrent. FutureTask ;
class NumThread implements Callable {
@Override
public Object call ( ) throws Exception {
int sum= 0 ;
for ( int i = 1 ; i <= 100 ; i++ ) {
if ( i% 2 == 0 ) {
System . out. println ( i) ;
sum+= i;
}
}
return sum;
}
}
public class ThreadNew {
public static void main ( String [ ] args) {
NumThread numThread = new NumThread ( ) ;
FutureTask futureTask = new FutureTask ( numThread) ;
new Thread ( futureTask) . start ( ) ;
try {
Object sum = futureTask. get ( ) ;
System . out. println ( sum) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
} catch ( ExecutionException e) {
e. printStackTrace ( ) ;
}
}
}
例子14
package com. atguigu. java2 ;
import java. util. concurrent. ExecutorService ;
import java. util. concurrent. Executors ;
import java. util. concurrent. ThreadPoolExecutor ;
class NumberThread implements Runnable {
@Override
public void run ( ) {
for ( int i= 0 ; i<= 100 ; i++ ) {
if ( i% 2 == 0 ) {
System . out. println ( Thread . currentThread ( ) . getName ( ) + ":" + i) ;
}
}
}
}
class NumberThread1 implements Runnable {
@Override
public void run ( ) {
for ( int i= 0 ; i<= 100 ; i++ ) {
if ( i% 2 != 0 ) {
System . out. println ( Thread . currentThread ( ) . getName ( ) + ":" + i) ;
}
}
}
}
public class ThreadPool {
public static void main ( String [ ] args) {
ExecutorService service = Executors . newFixedThreadPool ( 10 ) ;
ThreadPoolExecutor service1 = ( ThreadPoolExecutor ) service;
service1. setCorePoolSize ( 15 ) ;
service. execute ( new NumberThread ( ) ) ;
service. execute ( new NumberThread1 ( ) ) ;
service. shutdown ( ) ;
}
}