我正在编写一个包含5个线程的应用程序,它们可以同时从Web获取一些信息,并在缓冲类中填充5个不同的字段.
当所有线程完成工作时,我需要验证缓冲区数据并将其存储在数据库中.
我该怎么做(当所有线程完成工作时收到警报)?
当我在另一个线程中创建并启动一个线程时,它会是一个子线程吗?在子线程运行时是否阻止父线程终止?例如:
new Thread(new Runnable() {
@Override
public void run() {
//Do Sth
new Thread(new Runnable() {
@Override
public void run() {
//Do Sth
new Thread(new Runnable() {
@Override
public void run() {
//Do Sth
}
}).start();
//Do Sth
}
}).start();
//Do Sth
}
//Do Sth
}).start();
Run Code Online (Sandbox Code Playgroud) 在这里,我想从字符串URL转换图像。尽管有一个包含图像的URL,但它返回null。我在下面共享了代码。
private byte[] convertImageToByteArray(String imgPath)
{
byte[] byteArray = null;
Bitmap bmp = BitmapFactory.decodeFile(imgPath);
if(bmp != null)
{
try {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
//bmp.compress(Bitmap.CompressFormat.JPEG, 100, stream);
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byteArray = stream.toByteArray();
try
{
stream.close();
}
catch (IOException e)
{
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
else
{
try {
Bitmap bmpDefault = BitmapFactory.decodeResource(getResources(), R.drawable.na);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
//bmpDefault.compress(Bitmap.CompressFormat.JPEG, 100, stream);
bmpDefault.compress(Bitmap.CompressFormat.PNG, 100, stream);
byteArray = stream.toByteArray();
}
catch (Exception e)
{ …Run Code Online (Sandbox Code Playgroud) 我正在拿书做模拟测试,我发现了这个问题:
import java.util.concurrent.atomic.AtomicInteger;
class AtomicVariableTest {
private static AtomicInteger counter = new AtomicInteger(0);
static class Decrementer extends Thread {
public void run() {
counter.decrementAndGet(); // #1
}
}
static class Incrementer extends Thread {
public void run() {
counter.incrementAndGet(); // #2
}
}
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
new Incrementer().start();
new Decrementer().start();
}
System.out.println(counter);
}
}
Run Code Online (Sandbox Code Playgroud)
答案:
该程序将始终打印0.
但我认为无法保证线程在打印计数器值时完成.
我的意思是,大部分时间它会返回0,但如果你对理论严格,则无法保证这一点.
我对么?