Threads and Anonymous Classes in JAVA
As we all know,a thread is a separate process on your computer.you can run multiple threads all at the same time.
multi-threaded code has the disadvantage of becoming quite complex very quickly,although java has some great classes for dealing
with multithreading and simplifying it.
Today we will just look at creating threads,along with using anonymous classes to simplify(or some would say,complexify)your code.
there are two methods to Creating Threads in Java
the first way is to extend the Thread class, override the run() method with the code you want to execute,
then create a new object from your class and call start().
the second method is to pass an implementation of the Runnable interface to the constructor of Thread,
then call start().
we will look at both of the method in turn.
1.Extending the Thread Class
the sample code ad bellow:
public class Worker extends Thread {
@Override
public void run() {
// Loop for ten iterations.
for(int i=0; i<10; i++) {
System.out.println(i + " looping ...");
// Sleep for a while
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// Interrupted exception will occur if
// the Worker object's interrupt() method
// is called. interrupt() is inherited
// from the Thread class.
break;
}
}
}
}
As shown above, we have create a Worker class that extends Thread. And override the run() Method and put some code
in it. The code just loops repeatedly and outputs a method.
we've also used a static method of the thread class,sleep().
note:if you use sleep,you should have to catch InterruptedException.
In the code below,we create two worker class and call their inherited start() methods, both run at the same time,not one after the other
public class Application {
public static void main(String[] args) {
Worker worker1 = new Worker();
worker1.start();
Worker worker2 = new Worker();
worker2.start();
// You can call interrupt() if you want
// to interrupt a thread. The thread itself
// decides how to handle interrupts.
// worker1.interrupt();
}
}
screenshot as below:
0 looping ...
0 looping ...
1 looping ...
1 looping ...
2 looping ...
2 looping ...
3 looping ...
3 looping ...
4 looping ...
4 looping ...
5 looping ...
5 looping ...
6 looping ...
6 looping ...
7 looping ...
7 looping ...
8 looping ...
8 looping ...
9 looping ...
9 looping ...
the start() method, inherited from the parent Thread class, creates a new thread and runs whatever code is in run() in the new thread.
if not use the threads:
public class Application {
public static void main(String[] args) {
Worker worker1 = new Worker();
worker1.run();
Worker worker2 = new Worker();
worker2.run();
// You can call interrupt() if you want
// to interrupt a thread. The thread itself
// decides how to handle interrupts.
// worker1.interrupt();
}
}
result as below:
0 looping ...
1 looping ...
2 looping ...
3 looping ...
4 looping ...
5 looping ...
6 looping ...
7 looping ...
8 looping ...
9 looping ...
0 looping ...
1 looping ...
2 looping ...
3 looping ...
4 looping ...
5 looping ...
6 looping ...
7 looping ...
8 looping ...
9 looping ...
above code doesn't use multithreading, take twice as long to run.
2.passing code to Thread Directly
the second method of starting a thread is to put the code you want to run in the run method of a class that implements the Runnable interface, then pass it to
the constructor of a thread class
the code below does exactly that;we've put the code all in one file to make it easier to follow.
class CodeRunner implements Runnable {
@Override
public void run() {
// Loop for ten iterations.
for(int i=0; i<10; i++) {
System.out.println(i + " looping ...");
// Sleep for a while
try {
Thread.sleep(200);
} catch (InterruptedException e) {
break;
}
}
}
}
public class Application {
public static void main(String[] args) {
CodeRunner runner = new CodeRunner();
Thread thread = new Thread(runner);
thread.start();
}
}
result:
0 looping ...
1 looping ...
2 looping ...
3 looping ...
4 looping ...
5 looping ...
6 looping ...
7 looping ...
8 looping ...
9 looping ...
we can simplify this code by calling new directly on our coderunner class,right where we create the thread.
Thread thread = new Thread(new CodeRunner());
thread.start();
3.Quick and Dirty Thread using Anonymous Class
in fact we can make this code even terser by creating a new intance of Runnable,sortof,directly in the Thread constructor.
Actually,we can't create a new intance of Runnable because it's an interface; so we can't do the follow:
// Won't work
Thread thread = new Thread(new Runnable());
thread.start();
but we can get this to work if we add in some curly brackets and implement the missing run() method in them.
// This works
Thread thread = new Thread(new Runnable() { @Override
public void run() { } }); thread.start();
of course, to get this code to do anything, we have to add some actual code to run.
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
for(int i=0; i<10; i++) {
System.out.println(i + " looping ...");
}
}
});
thread.start();
0 looping ...
1 looping ...
2 looping ...
3 looping ...
4 looping ...
5 looping ...
6 looping ...
7 looping ...
8 looping ...
9 looping ...
finally,we can make the code ecen more terse, if a little more cryptic,by not bothering to declare a variable to hold the thread class, and then
just calling the stat() method on it directly.
new Thread(new Runnable() {
@Override
public void run() {
for(int i=0; i<10; i++) {
System.out.println(i + " looping ...");
}
}
}).start();
here just to make the code a bit clearer.
if you are also interest in linux and android embed system,please connection with us in QQ group:139761394
Threads and Anonymous Classes in JAVA的更多相关文章
- java语言中的匿名类与lambda表达式介绍与总结 (Anonymous Classes and Lambda Expressions)
2017/6/30 转载写明出处:http://www.cnblogs.com/daren-lin/p/anonymous-classes-and-lambda-expressions-in-java ...
- JAVA匿名内部类(Anonymous Classes)
1.前言 匿名内部类在我们JAVA程序员的日常工作中经常要用到,但是很多时候也只是照本宣科地用,虽然也在用,但往往忽略了以下几点:为什么能这么用?匿名内部类的语法是怎样的?有哪些限制?因此,最近,我在 ...
- Unit Testing of Classes in Java
Every class can have a main method. That is a handy trick for unit testing of classes. For example, ...
- Replacing the deprecated Java JPEG classes for Java 7
[src: https://blog.idrsolutions.com/2012/05/replacing-the-deprecated-java-jpeg-classes-for-java-7/] ...
- Java基础之二十 并发
20.1 并发得多面性 并发编程令人困惑的一个主要原因:使用并发时需要解决的问题有多个,而实现并发的方法也有多种,并且在这两者之间没有明显的映射关系. 20.1.1 更快的执行 速度问题初听起来很简单 ...
- java--线程认识与实例记录 NO.1
下面的内容都是从java编程思想一书中摘取出来,我认为很有产考价值,并且便于后续使用. 主要内容是记录继承thread和实现runnable接口两种方式的代码用法,及内部类中启用线程的用法. 1.首先 ...
- 【Try Kotlin】Kotlin Koans 代码笔记
Kotlin Koans 心印 Introduction 1.Hello, world! Simple Functions Take a look at function syntax and mak ...
- Java8_02_lambda表达式
一.前言 这一节我们来了解下lambda表达式,主要关注以下几点: 行为参数化 匿名类 Lambda 表达式 方法 引用 二.行为参数化 1.概念 行为参数化(behavior parameteriz ...
- Java Inner Classes
When thinking about inner classes in java, the first thing that comes to my mind is that, WHY do we ...
随机推荐
- Oracle游标
转自:http://www.cnblogs.com/fjfzhkb/archive/2007/09/12/891031.html 游标-----内存中的一块区域,存放的是select 的结果 ...
- Java 内省机制
一.内省 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法.JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的 ...
- MarkDown使用 (一)
MarkDown的数学公式输入 MarkDown的数学公式输入 1.如何插入公式 LaTeX的数学公式有两种:行中公式和独立公式.行中公式放在文中与其它文字混编,独立公式单独成行. 行中公式可以用如下 ...
- Spring-AOP实践
Spring-AOP实践 公司的项目有的页面超级慢,20s以上,不知道用户会不会疯掉,于是老大说这个页面要性能优化.于是,首先就要搞清楚究竟是哪一步耗时太多. 我采用spring aop来统计各个阶段 ...
- e.currentTarget
e.target总是指向点击的目标 e.currentTarget会指向这个点击标的冒泡对象 <div class="wrap"> wrap <div class ...
- .NET(C#):在数组成员上加入XmlElement特性
原文 www.cnblogs.com/mgen/archive/2011/12/04/2276131.html 当对如下类进行XML序列化时: publicclassa { }; } 结果会是: &l ...
- mysql 函数执行权限
mysql> show grants for query_all@'115.236.1x0.x'; +---------------------------------------------- ...
- 解决android加载图片时内存溢出问题
尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,因为这些函数在完成decode后,最终都是通过jav ...
- Android 调用相册 拍照 实现系统控件缩放 切割图片
android 下如果做处理图片的软件 可以调用系统的控件 实现缩放切割图片 非常好的效果 今天写了一个demo分享给大家. package cn.m15.test; import java.io.B ...
- std::map中函数用法集合
1 STL的map表里有一个erase方法用来从一个map中删除掉指令的节点 2 eg: 3 map<string,string> mapTest; 4 typedef map< ...