线程的简单创建
package com.atguigu.java1;
/*
* 创建一个子线程,完成1-100之间自然数的输出。同样的,主线程执行同样的操作
* 创建多线程的第一种方式:继承java.lang.Thread类
*/
//1.创建一个继承于Thread的子类
class SubThread extends Thread{
//重写Thread类的run()方法。方法内实现此子线程要完成的功能
public void run(){
for(int i = 1; i<= 100; i++){
System.out.println(Thread.currentThread().getName() + ":" + i);
}
}
}
public class TestThread {
public static void main(String[] args) {
//3.创建子类的对象
SubThread st1 = new SubThread();
SubThread st2 = new SubThread();
//4.调用线程的start():启动此线程;调用相应的run()方法
//一个线程只能够执行一次start()
//不能通过Thread实现类对象的run()方法去启动一个线程
st1.start();
st2.start();
//st.start();//会报异常,一个线程只能被启动一次
//st.run();//若不start()启动,则相当于调用对象的一个方法
for(int i = 1; i<= 100; i++){
System.out.println(Thread.currentThread().getName() + ":" + i);
}
}
}//输出结果主子线程交替输出,谁抢到线程,谁就输出
线程的优先级
package com.atguigu.java1;
/*
* 设置线程的优先级:
* getPriority():返回线程优先级
* setPriority(int newPriority):改变线程优先级
* 创建一个子线程,完成1-100之间自然数的输出。同样的,主线程执行同样的操作
* 创建多线程的第一种方式:继承java.lang.Thread类
*
*/
class SubThread3 extends Thread{
public void run(){
for(int i = 1; i<= 100; i++){
System.out.println(Thread.currentThread().getName() +
Thread.currentThread().getPriority() +":" + i);
}
}
}
public class TestThread3 {
public static void main(String[] args) {
SubThread3 st1 = new SubThread3();
st1.setPriority(Thread.MAX_PRIORITY);
st1.start();
for(int i = 1; i<= 100; i++){
System.out.println(Thread.currentThread().getName()
+Thread.currentThread().getPriority() + ":"+ i);
}
}
}//输出结果主子线程交替输出,谁抢到线程,谁就输出
线程的方法
package com.atguigu.java1;
/*
* Thread类的常用方法:
* 1.start():启用线程并执行相应的run()方法
* 2.run():子线程要执行的代码放入run()方法中
* 3.currenThread():静态的,调用当前的线程
* 4.getName():获取此线程的名字
* 5.setName():设置此线程的名字
* 6.yield():调用此方法的线程,释放当前CPU的执行权
* 7.join():在A线程中调用B线程的join()方法,表示:当执行到此方法,A线程停止执行,
* 直至B线程执行完毕,A线程再接着join()之后的代码执行
* 8.isAlive():判断当前进程是否还活着
* 9.sleep(long l):显示的让当前程序睡眠l毫秒
* 10.线程通信:wait() nitify() notifyAll()
*
* 设置线程的优先级:
* getPriority():返回线程优先级
* setPriority(int newPriority):改变线程优先级
*/
class SubThread1 extends Thread{
public void run(){
for(int i = 1; i<= 100; i++){
try {
Thread.currentThread().sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":" + i);
}
}
}
public class TestThread1 {
public static void main(String[] args) {
SubThread1 st1 = new SubThread1();
st1.setName("子线程1");//设置子线程的名字
st1.start();
Thread.currentThread().setName("=======主线程");//设置主线程的名字
for(int i = 1; i<= 100; i++){
System.out.println(Thread.currentThread().getName() + ":" + i);
if (i % 10 == 0) {
Thread.currentThread().yield(); //让主线程yield()
}
System.out.println(st1.isAlive());
}
}
}//输出结果主子线程交替输出,谁抢到线程,谁就输出
网友评论