开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第23天,点击查看活动详情
方法一:实现Runnable
- 首先自定义一个MyRunnable类来实现Runnable接口。
- 实现Runnable接口的run()方法。
- 创建线程对象并调用start()方法来启动线程。
代码示例
package com.Jinone.www;
import java.io.IOException;
public class TextThread implements Runnable {
private int as=1;
@Override
public void run() {
while(true) {
if(as>=100) {
System.out.println("test1");
System.out.println("test2");
System.out.println("test3);
break;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
if(Thread.currentThread().getName().equals("1")) {
asone++;
}
if(Thread.currentThread().getName().equals("2")) {
astwo++;
}
if(Thread.currentThread().getName().equals("3")) {
asthree++;
}
}
}
public static void main(String[] args) {
TextThread textThread=new TextThread();
new Thread(textThread,"1").start();
new Thread(textThread,"2").start();
new Thread(textThread,"3").start();
}
}
方法二:继承Thread类
- 子类继承Thread父类后共享父类功能,子类因此也具有了多线程的功能。
- 子类对象使用.start()来启动线程。
上述两种方法是有区别的,一般并不推荐使用Thread类的方式来实现多线程,因为不能避免OOP单继承的局限性,比较推荐使用实现Runnable接口的方式来实现多线程,这样可以避免继承的局限性,可以使一个对象同时被多个线程使用,灵活方便。
多线程面对的问题:当多个线程对同一块内存资源进行操作时,可能会发生冲突,造成数据紊乱,很显然,这样的线程是不安全的。
静态代理
真实的对象和代理对象都必须实现一个接口,代理对象还需要代理真实角色,这样做的好处是可以使代理对象实现更多功能,这些功能是真实对象所无法实现的,而真实对象则专注于自己的功能。
代码示例
//目标接口 public interface ProxyInterface { public void sendMsg(); }
//目标对象 public class SourceObject implements ProxyInterface{ @Override public void sendMsg() { System.out.println("send message!!"); } }
//代理对象
public class ProxyDemo implements ProxyInterface{
private SourceObject target;
public ProxyDemo(ProxyInterface target){
this.target = (SourceObject) target;
}
//代理对象对目标对象的sendMsg方法进行增强
@Override
public void sendMsg() {
System.out.println("get phone number!");
target.sendMsg();
System.out.println("send the email!");
}
}