线程的创建有四种方式,线程同步可以回答有2或3种方式。
线程是一个程序内部的一条执行路径。
多线程的创建
方式一:继承于Thread类的子类
/*
1.创建一个继承于Thread类的子类
2.重写Thread类的run()--->创建线程要做的事
3.创建Thread类的子类对象
4.通过此对象调用start()
*/
//创建继承于Thread类的子类
class MyThread extends Thread{
//重写Thread类的run()
@Override
public void run() {
for(int i=0;i<100;i++)
{
if(i%2==0)
{
System.out.println(i);
}
}
}
}
public class ThreadTest {
//遍历100以内的所有偶数
public static void main(String[] args) {
//创建Thread子类的对象
MyThread t1 = new MyThread();
//调start()方法
t1.start();//线程1
//不可以让已经start的对象再start
//可以new一个t2再start,这样又多了一个线程
for(int i=1;i<100;)//线程2
{
System.out.println(i);
i=i+2;
}
//输出的内容不确定,看个人电脑cpu性能
}
}
注意
不能直接调用run()方法来启动线程,否则就是单线程了。
要想多个线程,可以创建多个对象。
方式二:创建Thread类的匿名子类
public class ThreadTest {
public static void main(String[] args) {
new Thread(){
@Override
public void run() {
for(int i=0;i<10;i++)
System.out.println(i);
}
}.start();
new Thread(){
@Override
public void run() {
for(int i=0;i<10;i++)
System.out.println(i);
}
}.start();
}
}
class myThread extends Thread{
@Override
public void run() {
for (int i=0;i<5;i++)
//获取当前线程名字
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
public class ThreadTest {
//遍历100以内的所有偶数
public static void main(String[] args) {
myThread h1 = new myThread();
//取名方式一
h1.setName("线程一");
//取名方式二:
//myThread h1=new myThread("线程一");
h1.start();
//给主线程设置名称
Thread.currentThread().setName("主线程");
for (int i=0;i<5;i++){
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
class myThread extends Thread{
@Override
public void run() {
for (int i=0;i<100;i++)
//获取当前线程名字
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
public class ThreadTest {
//遍历100以内的所有偶数
public static void main(String[] args) {
myThread h1 = new myThread();
h1.setName("线程一");
h1.start();
//给主线程设置名称
Thread.currentThread().setName("主线程");
for(int i=0;i<100;i++){
System.out.println(Thread.currentThread().getName()+":"+i);
if(i==20){
try{
//h1加入执行,直到h1执行结束
h1.join();
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
}
}