线程

来源:互联网 发布:乐视视频mac 编辑:程序博客网 时间:2024/06/17 14:48

线程的两种创建方法


1、继承Thread 类,然后重写类里的方法run,通过调用star()方法,来开启一个线程

public class L6_1 {
public static void main(String[] args) {
Xc xc = new Xc();
//xc.run();
xc.start(); //谁调用star(),程序就会自动调用run方法;
//star程序开始的时候单开启一个线程,而不是直接调用

for(int i=0;i<50;i++){
System.out.println("主程序");
}
}
}
class Xc extends Thread{  //创建线程所继承的类
public void run(){//run方法是改写的父类方法 run是Thread的方法
//没有run会报错 代码写在run方法里面
for(int i=0;i<50;i++){
System.out.println("子程序");
}
}
}

2、不继承类,通过实现接口的方式

public class L6_2 {
public static void main(String[] args) {

Xc2 xc2 = new Xc2();

Thread a = new Thread(xc2);
a.start();
for(int i=0;i<20;i++){
System.out.println("主函数");
}
}
}


//不继承类,而是改成实现接口
class Xc2 implements Runnable{


@Override
public void run() {
for(int i=0;i<20;i++){
System.out.println("子函数");
}
}


}

3、线程运行是无序的,可以通过优先级



public class L6_4 {
public static void main(String[] args) {
Thread xc1 = new Thread(new Xc41());
Thread xc2 = new Thread(new Xc42());
//默认优先级是5,数字越大优先级越高,但是优先级不是绝对的,只是被分配的机会高
xc2.setPriority(Thread.NORM_PRIORITY+3);
xc1.start();
xc2.start();
}
}


class Xc41 implements Runnable{


@Override
public void run() {
for(int i=0;i<100;i++){
System.out.println("1线程"+i);
}
}

}
class Xc42 implements Runnable{


@Override
public void run() {
for(int i=0;i<100;i++){
System.out.println("第二个线程正在被执行"+i);
}
}

}

4、线程的睡眠


public class L6_5 {
public static void main(String[] args) {
Xc5 xc5 = new Xc5();
Thread a = new Thread(xc5);
a.start();
}
}
class Xc5 implements Runnable{


@Override
public void run() {
for(int i=0;i<10;i++){
System.out.println(Thread.currentThread().getName()+" "+i);
try {
//线程睡眠的方法 1000毫秒
Thread.sleep(1000);
} catch (Exception e) {

e.printStackTrace();
}
}
}


}

5、线程的让步


public class L6_6 {
public static void main(String[] args) {
Xc6 xc6 = new Xc6();
Thread a = new Thread(xc6);
Thread b = new Thread(xc6);

a.setName("线程一");
b.setName("线程二");

a.start();
b.start();
}
}
class Xc6 implements Runnable{


@Override
public void run() {
// TODO Auto-generated method stub
for(int i=1;i<30;i++){
System.out.println(Thread.currentThread().getName()+" "+i);
if(i%5 == 0){
//
Thread.yield();
}
}
}}

6、线程的阻塞

public class L6_7 {
public static void main(String[] args) {
Xc7 xc7 = new Xc7(); 
Thread a = new Thread(xc7);
a.start()
try {
a.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int i=1;i<15;i++){
System.out.println("主线程"+i);
}
}
}
class Xc7 implements Runnable{


@Override
public void run() {
// TODO Auto-generated method stub
for(int i=1;i<15;i++){
System.out.println("子线程"+i);
}
}}