分享

java多线程

 擎天猪mpnlajkd 2016-09-18
java多线程基本实现方式,
一 继承Thread类,重写Thread类的run方法
二 实现Runnabel接口
1 继承Thread类
package com.hzlssd.Thread;
public class MyThread extends Thread{
public void run() { 
for (int i = 0; i < 100; i++) { 
if ((i) % 10 == 0) { 
System.out.println("-------" + i); 
System.out.print(i); 
try { 
//休眠10秒
Thread.sleep(10); 
System.out.print("线程睡眠1毫秒!\n"); 
} catch (InterruptedException e) { 
e.printStackTrace(); 

public static void main(String[] args) { 
new MyThread().start(); 
}
}

2 实现Runnable接口
public class DoSomething implements Runnable{
    private String name; 
    
    public DoSomething(String name) { 
        this.name = name; 
    }

@Override
public void run() {
for (int i = 0; i < 5; i++) { 
for (long k = 0; k < 100; k++); 
System.out.println(name + ": " + i);
}
}

package com.hzlssd.Thread;
import static org.junit.Assert.*;
import org.junit.Test;
public class TestRunnable {
   @Test
   public void RunnableTest() throws InterruptedException{
DoSomething ds1 = new DoSomething("阿三"); 
        DoSomething ds2 = new DoSomething("李四"); 

        Thread t1 = new Thread(ds1); 
        Thread t2 = new Thread(ds2); 

        t1.start(); 
        t2.start();
        t2.join();
    }  
}

3项目中的应用
public void test( )  { 
Thread t = new Thread(new Runnable(){
@Override
public void run() {
SmartSocketServer.main(new String[1]);    
}
});
    t.start();
};

线程池操作
package com.hzlssd.Thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ExecutorServiceTest {
    
public static void main(String[] args) { 
   
        //创建一个可重用固定线程数的线程池 
        //获取当前电脑cpu数
        int   cpuNum = Runtime.getRuntime().availableProcessors();
        //定义单个cpu线程池的大小
        int   POOL_SIZE = 30;
        ExecutorService pool = Executors.newFixedThreadPool(cpuNum * POOL_SIZE); 
        
        //创建实现了Runnable接口对象,Thread对象当然也实现了Runnable接口 
        Thread t1 = new MyThreadInner(); 
        Thread t2 = new MyThreadInner(); 
        Thread t3 = new MyThreadInner(); 
        Thread t4 = new MyThreadInner(); 
        Thread t5 = new MyThreadInner(); 
        
        //将线程放入池中进行执行,相当于调用了start方法 
       pool.execute(t1); 
        pool.execute(t2); 
        pool.execute(t3); 
        pool.execute(t4); 
        pool.execute(t5); 
        //关闭线程池 
        pool.shutdown(); 
    }
}

class MyThreadInner extends Thread{ 
@Override 
public void run() { 
System.out.println(Thread.currentThread().getName()+"正在执行。。。"); 
}
}

java多线程取得当前线程的名称
Thread.currentThread().getName()
赋名称
Thread.currentThread().setName()

让出cpu的执行权
Thread.currentThread().yield()

join()在A线程中调用B线程的join()方法,当执行到此方法时,A线程停止执行,直到
B线程停止执行,A线程才继续执行

判断当前线程是否存活
Boolean bol = thread1.isAlive()

显示得让线程睡眠
thread1.sleep(long l)

设置线程的优先级 1 - 10 数值越大,优先级越高 默认的优先级为5
tr1.setPriority(Thread.MAX_PRIRITY)
获得当前线程的优先级
th1.getPriority() 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多