线程
多线程的创建与启动
Thread类
package day15 ;
public class ThreadMethodLearn {
public static void main ( String [ ] args) {
Thread t3 = new Thread ( new testT ( ) ) ;
System . out. println ( t3. getName ( ) ) ;
t3. setName ( "线程t3" ) ;
System . out. println ( t3. getName ( ) ) ;
}
}
class testT implements Runnable {
@Override
public void run ( a) {
System . out. println ( "测试" ) ;
}
}
创建线程的两种方式
package day15 ;
public class ImplentThread extends Thread {
@Override
public void run ( ) {
System . out. println ( "多线程运行的代码" ) ;
for ( int i= 0 ; i< 5 ; i++ ) {
System . out. println ( "这是多线程的逻辑代码" + i) ;
}
}
}
package day15 ;
public class CreatThreadLearn {
public static void main ( String [ ] args) {
Thread t = new ImplentThread ( ) ;
t. start ( ) ;
System . out. println ( "**************" ) ;
System . out. println ( "**************" ) ;
System . out. println ( "**************" ) ;
System . out. println ( "**************" ) ;
System . out. println ( "===============" ) ;
}
}
实现Runnable接口实现多线程
package day15 ;
public class TestRunnable implements Runnable {
@Override
public void run ( ) {
System . out. println ( Thread . currentThread ( ) . getName ( ) + "Runnable多线程运行的代码" ) ;
for ( int i= 0 ; i< 6 ; i++ ) {
System . out. println ( "这是Runnable多线程的逻辑代码" + i) ;
}
}
}
package day15 ;
public class RunnableCreateThreadLearn {
public static void main ( String [ ] args) {
System . out. println ( "*****************1" ) ;
System . out. println ( "*****************2" ) ;
System . out. println ( "*****************3" ) ;
System . out. println ( "*****************4" ) ;
System . out. println ( "*****************5" ) ;
Thread t2 = new Thread ( new TestRunnable ( ) , "Thread的Runnable" ) ;
t2. start ( ) ;
}
}
继承方式和实现方式的联系与区别
多线程程序的优点
线程的优先级
package day15 ;
public class ThreadMethodLearn {
public static void main ( String [ ] args) {
Thread t2 = new Thread ( new testT ( ) ) ;
Thread t3 = new Thread ( new testT ( ) ) ;
System . out. println ( "t2的优先级:" + t2. getPriority ( ) ) ; ;
System . out. println ( "t3的优先级:" + t3. getPriority ( ) ) ; ;
t2. setPriority ( 3 ) ;
System . out. println ( "t2的改变后优先级:" + t2. getPriority ( ) ) ;
}
}
class testT implements Runnable {
@Override
public void run ( ) {
System . out. println ( "测试" ) ;
}
}
Thread类的有关方法
package day15 ;
public class TestRunnable implements Runnable {
@Override
public void run ( ) {
System . out. println ( Thread . currentThread ( ) . getName ( ) + "Runnable多线程运行的代码" ) ;
for ( int i= 0 ; i< 6 ; i++ ) {
try {
Thread . sleep ( 1000 ) ;
} catch ( Exception e) {
e. printStackTrace ( ) ;
}
System . out. println ( "这是Runnable多线程的逻辑代码" + i) ;
}
}
}
package day15 ;
public class ThreadMethodLearn {
public static void main ( String [ ] args) {
Thread t2 = new Thread ( new TestRunnable ( ) , "t2线程" ) ;
Thread t3 = new Thread ( new TestRunnable ( ) , "t3线程" ) ;
t2. start ( ) ;
System . out. println ( "**********************************" ) ;
System . out. println ( "**********************************" ) ;
System . out. println ( "**********************************" ) ;
try {
t2. join ( ) ;
} catch ( Exception e) {
e. printStackTrace ( ) ;
}
System . out. println ( "**********************************" ) ;
System . out. println ( "**********************************" ) ;
}
}
线程的生命周期
线程的同步与死锁
线程死锁
线程通信
生产者和消费者
package day15;
/**
* 生产者与消费者
*
*/
public class CustomerAndCreaterLearn {
public static void main( String[ ] args) {
Clerk c = new Clerk( ) ;
//消费时不生产,生产时不消费
new Thread( new Runnable ( ) {
@Override
public void run ( ) {
synchronized ( c) { //无限循环代表无限的生产次数
while( true) {
if( c.productNum == 0 ) { //商品产品数为0
System.out.println( "产品数为0,开始生产" ) ;
while( c.productNum < 4 ) {
c.productNum += 1 ;
System.out.println( "库存" +c.productNum) ;
}
System.out.println( "产品数为:" +c.productNum+",停止生产" ) ;
c.notify( ) ; //唤醒消费者线程
System.out.println( "唤醒消费者线程" ) ;
}
else {
try {
c.wait( ) ; //生产者线程等待
} catch ( Exception e) {
e.printStackTrace( ) ;
}
}
}
}
}
} ,"生产者" ) .start( ) ; ;
new Thread( new Runnable ( ) {
@Override
public void run ( ) {
synchronized ( c) { //无限循环代表无限的生产次数
while( true) {
if( c.productNum == 4 ) { //商品产品数为4
System.out.println( "产品数为4,开始消费" ) ;
while( c.productNum > 0 ) {
c.productNum -= 1 ;
System.out.println( "库存" +c.productNum) ;
}
System.out.println( "产品数为:" +c.productNum+",停止消费" ) ;
c.notify( ) ; //唤醒生产者线程
System.out.println( "唤醒生产者线程" ) ;
}
else {
try {
c.wait( ) ; //消费者线程等待
} catch ( Exception e) {
e.printStackTrace( ) ;
}
}
}
}
}
} ,"消费者" ) .start( ) ;
}
}
class Clerk{
public static int productNum = 0 ;
}