黑马程序员-java基础-三种实现线程的方式
2015-07-02 00:45
507 查看
-<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流!-
在java中有两种方式实现线程,继承Thread类和实现Runnable接口 Callable接口
方法一: 一个类只要继承了Thread类,同时覆写了run()方法那么就能实现多线程。
public class ThreadDemo extends Thread{
private String name;
public ThreadDemo(String name) {
this.name=name;
}
public void run() {
for(int i=0;i<5;i++)
System.out.print("Thread运行:"+name+"i->"+i);
}
}
public class ThreadTest {
public static void main(String[] args) {
ThreadDemo t1=new ThreadDemo("线程A");
ThreadDemo t2=new ThreadDemo("线程B");
//线程启动jvm自动找到run()方法
t1.start();
t2.start();
}
}
方法二: 实现Runnable接口,覆写公共的run()方法
public class ThreadDemo implements Runnable{
private String name;
public ThreadDemo(String name) {
this.name=name;
}
public void run() {
for(int i=0;i<5;i++)
System.out.print("Thread运行:"+name+"i->"+i);
}
}
public class ThreadTest {
public static void main(String[] args) {
ThreadDemo t1=new ThreadDemo("线程A");
new Thread(t1).start();
}
}
方法三: 实现Callable接口方式
class ThreadCallable implements Callable<String>{
public String call(){
return "haha";
}
}
public class ThreadPoolDemo1 {
public static void main(String[] args)throws Exception {
ExecutorService es = Executors.newFixedThreadPool(2);
Future<String> f1 = es.submit(new ThreadCallable());
Future<String> f2 = es.submit(new ThreadCallable());
String s1 = f1.get();
String s2 = f2.get();
System.out.println(s1);
System.out.println(s2);
es.shutdown();
}
}
Runable比Thread线程安全
设置线程名称:
在Thread类中可以使用setName(String name),Thread(Runnable target,String name),
Thread(String name)
取出线程名称: 在Thread类中可以使用getName();
public static Thread currentThread()得到当前线程的名称
在java执行中一个java程序至少启动两个线程:main,gc两个线程。
线程的休眠: Thread.sleep(2000)需要try……catch(){}异常为InterruptException中断异常
线程的同步和异步
1,同步代码块 synchronized(this){//同步代码块}
public class ThreadDemo implements Runnable{
int tick=5;
public void run() {
for(int i=0;i<5;i++)
synchronized(this) {
if(this.tick>0)
System.out.println(Thread.currentThread().getName()+"->"+tick--);
}
}
}
public class ThreadTest {
public static void main(String[] args) {
ThreadDemo t1=new ThreadDemo();
new Thread(t1,"线程A").start();
new Thread(t1,"线程B").start();
new Thread(t1,"线程C").start();
}
}
2,同步方法
public class ThreadDemo implements Runnable{
int tick=5;
public void run() {
this.sail();
}
public synchronized void sail() {
for(int i=0;i<5;i++) {
9e9e
if(this.tick>0)
System.out.println(Thread.currentThread().getName()+"->"+tick--);
}
}
}
public class ThreadTest {
public static void main(String[] args) {
ThreadDemo t1=new ThreadDemo();
new Thread(t1,"线程A").start();
new Thread(t1,"线程B").start();
new Thread(t1,"线程C").start();
}
}
在java中有两种方式实现线程,继承Thread类和实现Runnable接口 Callable接口
方法一: 一个类只要继承了Thread类,同时覆写了run()方法那么就能实现多线程。
public class ThreadDemo extends Thread{
private String name;
public ThreadDemo(String name) {
this.name=name;
}
public void run() {
for(int i=0;i<5;i++)
System.out.print("Thread运行:"+name+"i->"+i);
}
}
public class ThreadTest {
public static void main(String[] args) {
ThreadDemo t1=new ThreadDemo("线程A");
ThreadDemo t2=new ThreadDemo("线程B");
//线程启动jvm自动找到run()方法
t1.start();
t2.start();
}
}
方法二: 实现Runnable接口,覆写公共的run()方法
public class ThreadDemo implements Runnable{
private String name;
public ThreadDemo(String name) {
this.name=name;
}
public void run() {
for(int i=0;i<5;i++)
System.out.print("Thread运行:"+name+"i->"+i);
}
}
public class ThreadTest {
public static void main(String[] args) {
ThreadDemo t1=new ThreadDemo("线程A");
new Thread(t1).start();
}
}
方法三: 实现Callable接口方式
class ThreadCallable implements Callable<String>{
public String call(){
return "haha";
}
}
public class ThreadPoolDemo1 {
public static void main(String[] args)throws Exception {
ExecutorService es = Executors.newFixedThreadPool(2);
Future<String> f1 = es.submit(new ThreadCallable());
Future<String> f2 = es.submit(new ThreadCallable());
String s1 = f1.get();
String s2 = f2.get();
System.out.println(s1);
System.out.println(s2);
es.shutdown();
}
}
Runable比Thread线程安全
设置线程名称:
在Thread类中可以使用setName(String name),Thread(Runnable target,String name),
Thread(String name)
取出线程名称: 在Thread类中可以使用getName();
public static Thread currentThread()得到当前线程的名称
在java执行中一个java程序至少启动两个线程:main,gc两个线程。
线程的休眠: Thread.sleep(2000)需要try……catch(){}异常为InterruptException中断异常
线程的同步和异步
1,同步代码块 synchronized(this){//同步代码块}
public class ThreadDemo implements Runnable{
int tick=5;
public void run() {
for(int i=0;i<5;i++)
synchronized(this) {
if(this.tick>0)
System.out.println(Thread.currentThread().getName()+"->"+tick--);
}
}
}
public class ThreadTest {
public static void main(String[] args) {
ThreadDemo t1=new ThreadDemo();
new Thread(t1,"线程A").start();
new Thread(t1,"线程B").start();
new Thread(t1,"线程C").start();
}
}
2,同步方法
public class ThreadDemo implements Runnable{
int tick=5;
public void run() {
this.sail();
}
public synchronized void sail() {
for(int i=0;i<5;i++) {
9e9e
if(this.tick>0)
System.out.println(Thread.currentThread().getName()+"->"+tick--);
}
}
}
public class ThreadTest {
public static void main(String[] args) {
ThreadDemo t1=new ThreadDemo();
new Thread(t1,"线程A").start();
new Thread(t1,"线程B").start();
new Thread(t1,"线程C").start();
}
}
相关文章推荐
- 多线程 实现的两种方式
- 多线程编程总结
- 多线程一(简单的概念与实现方式)
- 黑马程序员------Java的多态性
- 黑马程序员-java基础-String类及String类的相关操作方法
- 黑马程序员------Java_IO关于缓冲区提高代码复用性
- 黑马程序员------IO流文件复制4种代码实现
- 黑马程序员------集合的遍历Iterator/ListIterator
- 程序员获取新编程技能的5个技巧?
- 程序员学会八大开发技巧 涨薪不是问题
- 黑马程序员------数组排序总结(Day12)
- 黑马程序员------判断语句概述
- 随笔:做一个平庸程序员,are you scared?
- 黑马程序员------数据类型与运算概述
- 程序员都应该熟练掌握最基本、最简单的“极小化程序调试法”
- 程序员的“纪律性”
- 黑马程序员------String概述
- 黑马程序员--有关OC内存管路set方法的思考
- 黑马程序员--OC内存管理之循环retain问题
- 一位俄罗斯程序员移民美国的故事